2016-02-06 71 views
0

我正在使用maven和aspectj插件,并且很好,最近我移动到gradle,我已经有了配置来构建/编译方面,并且工作正常,但是对于集成测试不是工作正常。 我有以下的配置集成测试+ aspectJ + gradle

sourceSets { 
    main { 
     java { 
      srcDir 'src/main/java' 
     } 
     resources { 
      srcDir "src/main/resources/" 
     } 
    } 

    integrationTest { 
     java { 
      compileClasspath += main.output + test.output 
      runtimeClasspath += main.output + test.output 
      srcDir file('src/test/it') 
     } 
     resources.srcDir file('src/test/resources') 
    } 

    generated { 
     java { 
      srcDirs = [ 
       "src/main/generated" 
      ] 
     } 
     compileClasspath += sourceSets.main.output 
    } 
} 

,但各方面并不编译/中集成测试工作正常。我试图做的是以下配置

compileIntegrationTestJava{ 

    sourceCompatibility="1.7" 
    targetCompatibility="1.7" 
    dependsOn generateQueryDSL 
    source generateQueryDSL.destinationDir 

    dependsOn configurations.ajc.getTaskDependencyFromProjectDependency(true, "compileJava") 

    doLast{ 
     ant.taskdef(resource:"org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: configurations.ajc.asPath) 
     ant.iajc(source:"1.7", target:"1.7", 
       destDir:sourceSets.integrationTest.output.classesDir.absolutePath, maxmem:"512m", fork:"true", 
       aspectPath:configurations.aspects.asPath, 
       sourceRootCopyFilter:"**/.svn/*,**/*.java",classpath:configurations.compile.asPath){ 
      sourceroots{ 
       sourceSets.main.java.srcDirs.each{ 
        pathelement(location:it.absolutePath) 
       } 
       sourceSets.integrationTest.java.srcDirs.each{ 
        pathelement(location:it.absolutePath) 
       } 
      } 
     } 
    } 
} 

我得到这个错误。

[ant:iajc] [error] build config error: bad sourceroot: \src\integrationTest\java 

如果我更改sourceSets.test.java.srcDirs.eachsourceSets.integrationTest.java.srcDirs.each/src/test/it下的IT不被编译,不会移动到正确的包,但如果我把我的IT测试/src/test/java下是正确编译。

我想知道如何把正确的sourceSetssrc/test/it以及如何添加到类路径,而不是一些类添加

sourceroots{ 
       sourceSets.main.java.srcDirs.each 

,因为这会使整个班级被添加到clasess/test/目录

如果你有任何链接或指导做到这一点,将是真正的赞赏

+0

嗨,Koitoer,你有没有得到这个地方?因为这也是我的问题。 – HankCa

回答

0

我解决了这个问题,并得到它的工作我相信。

当你说:

我想知道如何把正确的sourceSets指向 的src /测试/它,以及如何添加到类路径中某些类,而不是 添加sourceroots{...

你的意思是'你为什么需要编写所有的代码来添加一个srcDir'?我和你在一起!

了我认为得到这个工作对我来说是:

configurations { 
    querydslapt 
    integrationTestCompile.extendsFrom testCompile 
    integrationTestRuntime.extendsFrom testRuntime 

    ajc 
    aspectpath 
} 

dependencies { 
    ... 
    compile group: 'org.aspectj', name: 'aspectjrt', version: '1.8.9' 
    compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.8.9' 
    aspectpath group: 'org.springframework', name: 'spring-aspects', version: '4.3.0.RELEASE' 
    ajc 'org.aspectj:aspectjtools:1.8.9' 
} 

如果我只用Spring的方面,比如对交易织。

compileIntegrationTestJava { 
    dependsOn generateQueryDSL 
    classpath += sourceSets.main.runtimeClasspath 
    sourceCompatibility = "1.8" 
    targetCompatibility = "1.8" 

    doLast { 
     ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: configurations.ajc.asPath) 
     ant.iajc(source: "1.8", target: "1.8", 
       maxmem: "512m", fork: "true", 
       destDir: sourceSets.integrationTest.output.classesDir.absolutePath, 
       aspectPath: configurations.aspectpath.asPath, 
       classpath: classpath.asPath) { 
      sourceroots { 
       sourceSets.integrationTest.java.srcDirs.each { sd -> 
        if (file(sd).exists()) { 
         pathelement(location: sd.absolutePath) 
        } 
       } 
      } 
     } 
    } 

最棘手的部分是需要添加:

    if (file(sd).exists()) { 

这是消除多余的不存在的路径。那就是:

sourceSets.integrationTest.java.srcDirs包含(绝对路径):

  • src/integrationTest/java
  • src/integration-test/java

我把这个后卫AJC之前与[ant:iajc] [error] build config error: bad sourceroot: \src\integrationTest\java就像你失败。我通过添加调试任务(非常有帮助)确定了这一点:

task printprojectDebug { 
    doLast { 
     sourceSets.integrationTest.java.srcDirs.each { println it } 
     println '---- configurations.integrationTestCompile.asPath: ' 
     println configurations.integrationTestCompile.asPath 
     println '---- configurations.aspectpath.asPath:' 
     println configurations.aspectpath.asPath 
     println 'end' 
    } 
} 

并运行gradle printprojectDebug

我还在测试,看看这是否工作,因为我得到的错误,我还没有完全确定,如果是从方面编织问题。但它应该让你再次工作。

希望我的反馈可以帮助(任何人!)。