Thx for the input !

Created jira: http://jira.codehaus.org/browse/GRADLE-1093

kind regards
Magnus

Date: Thu, 5 Aug 2010 16:50:02 +1000
From: [email protected]
To: [email protected]
Subject: Re: [gradle-user] running tests with a weavingclassloader



  


    
  
  
    On 2/08/10 5:12 PM, Magnus Rundberget wrote:
    
      
      HI, 

      

      I'm wondering if its possible(/and how) to get the gradle test
      task (from java plugin) to run tests using a an aspecj
      WeavingClassLoader.

      In our current build we run a forked java task in ant that invokes
      ant junit (which again is forked per batch).

      

      

      our current ant test;

      <target name="test-junit" depends="check-test-junit-uptodate"
      unless="test.junit.uptodate">

              <mkdir dir="${target.test.reports}"/>

              <property name="test.path" refid="test.path.id"/>

              <java classname="org.apache.tools.ant.Main" fork="yes"
      dir=".">

                  <jvmarg value="-Xmx512m"/>

                  <jvmarg value="-XX:MaxPermSize=192m"/>

                  <arg value="-buildfile"/>

                  <arg value="${common.dir}/build-tests-ltw.xml"/>

                  <arg line="-Dbasedir='.'"/>

                  <arg line="-Dtest.classpath='${test.path}'"/>

                  <arg line="-Dmaven.junit.printSummary='true'"/>

                  <arg
      line="-Dmaven.test.include='**/*TestCase.class'"/>

                  <arg
      line="-Dweaving.class.loader='${weaving.class.loader}'"/>

                  <classpath>

                      <path
      location="c:\dev\tools\apache-ant-1.8.1\libs17\ant.jar"/>

                      <path
      location="c:\dev\tools\apache-ant-1.8.1\libs17\ant-junit.jar"/>

                      <path
      location="c:\dev\tools\apache-ant-1.8.1\libs17\ant-launcher.jar"/>

                      <path location="${lib.dir}/junit.jar"/>

                  </classpath>

              </java>

              <tstamp/>

              <echo file="${junit.timestamp}">${DSTAMP} -
      ${TSTAMP}</echo>

          </target>

      

      contents of build-tests-ltw.xml

      <target name="test">

              <!-- Defaults. Can be overridden on the command line
      -->

              <property name="maven.test.include"
      value="**/*TestCase.class"/>

              <property name="maven.test.exclude" value=""/>

              <property name="weaving.class.loader"
      value="com.telenor.cosmos.system.test.CosmosWeavingURLClassLoader"/>

      

              <junit printsummary="true" haltonfailure="no"
      fork="yes" forkmode="perBatch">

                  <jvmarg
value="-Djavax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"/>

                  <jvmarg
value="-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"/>

                  <jvmarg
      value="-Djava.system.class.loader=${weaving.class.loader}"/>

                  <jvmarg
value="-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"/>

                  <jvmarg value="-Xmx768m"/>

                  <jvmarg value="-XX:MaxPermSize=192m"/>

                  <classpath>

                      <pathelement path="${java.class.path}"/>

                      <pathelement path="${test.classpath}"/>

                      <pathelement path="${target.test.aspects}"/>

                  </classpath>

      

                  <formatter type="xml"/>

      

                  <batchtest todir="target/test-reports"
      failureproperty="junit.failure">

                      <fileset dir="target/test-classes"
      includes="${maven.test.include}"
      excludes="${maven.test.exclude}"/>

                  </batchtest>

              </junit>

      

              <antcall target="writeJunitIfSet"/>

              <antcall target="writeJunitIfNotSet"/>

          </target>

      

      ...never mind the duplication, the important bit is getting gradle
      to use the CosmosWeavingClassLoader (that extends aspectj
      CosmosWeavingClassLoader).

      

      I tried to simply set 

      

      dependencies {

        compile project(':cosmos-test') // + a range of other
      dependencies...

        testCompile // various test dependencies

        testRuntime project(':cosmos-test') //this is the project
      containing the CosmosWeavingClassLoader

      }

      

      test {

        systemProperties['java.system.class.loader'] =
      'com.telenor.cosmos.system.test.CosmosWeavingURLClassLoaders'

      }

      

    
    

    The way the test process is implemented means this won't work, as
    the project's classes aren't available on the system classpath when
    the jvm tries to instantiate the system classloader. There's no
    particular reason that this has to be the case, and we could
    certainly shuffle things around so that the classes are available.

    

    Could you add a JIRA issue for this problem?

    

    

    -- 
Adam Murdoch
Gradle Developer
http://www.gradle.org
CTO, Gradle Inc. - Gradle Training, Support, Consulting
http://www.gradle.biz                                     

Reply via email to