【问题标题】:Integration test + aspectJ + gradle集成测试+aspectJ+gradle
【发布时间】:2016-02-06 02:13:58
【问题描述】:

我正在使用 maven 和 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.integrationTest.java.srcDirs.each 行更改为sourceSets.test.java.srcDirs.each,则/src/test/it 下的IT 不会被编译并且不会移动到正确的包中,但是如果我将我的IT 测试放在/src/test/java 下编译正确。

我想知道如何将正确的sourceSets 指向src/test/it 以及如何将一些类添加到类路径而不是添加

sourceroots{
                sourceSets.main.java.srcDirs.each

因为这会将整个类添加到clasess/test/ 目录中

如果您有任何链接或指南,将不胜感激

【问题讨论】:

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

标签: java gradle aspectj


【解决方案1】:

我解决了这个问题,我相信它可以正常工作。

当你说:

我想知道如何将正确的 sourceSets 指向 src/test/it 以及如何在类路径中添加一些类而不是 添加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

我仍在测试这是否有效,因为我遇到了我尚未完全确定是否来自方面编织问题的错误。但它应该能让你再次工作。

希望我的反馈对(任何人!)有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2020-09-02
    • 2019-03-25
    • 2018-12-25
    • 2013-08-06
    相关资源
    最近更新 更多