我正在使用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测试置于{ {1}}正确编译。
我想知道如何将正确的/src/test/java
放到点sourceSets
以及如何向类路径添加一些类而不是添加
src/test/it
因为这会将整个类添加到sourceroots{
sourceSets.main.java.srcDirs.each
目录
如果您有任何链接或指南,我们将非常感激
答案 0 :(得分:1)
我解决了这个问题,让我相信它。
当你说:
我想知道如何将正确的sourceSets指向 src / test /它以及如何将类路径添加到类路径而不是 添加
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
。
我还在测试看看这是否有效,因为我遇到的错误是我还没有完全确定是否来自方面编织问题。但它应该让你再次工作。
希望我的反馈有所帮助(任何人!)。