我有一个Gradle项目,其中测试使用TestNG运行。 (我使用Intellij IDEA)
每次执行测试时我都需要启动一个aspectjweaver。 aspectjweaver定义为JVM参数,并添加到Build.gradle中的applicationDefaultJvmArgs:
version '1.0'
apply plugin: 'application'
def aspectjVersion = "1.8.7"
mainClassName = 'exa.tags.runner.TestManager'
applicationDefaultJvmArgs=["-javaagent:APP_HOME_PLACEHOLDER/lib/aspectjweaver-${aspectjVersion}.jar"]
dependencies {
compile "org.aspectj:aspectjweaver:${aspectjVersion}"
}
def weaver = configurations.compile.find { it.name.contains("aspectjweaver") }
startScripts << {
unixScript.text = unixScript.text.replace('APP_HOME_PLACEHOLDER', '\$APP_HOME')
windowsScript.text = windowsScript.text.replace('APP_HOME_PLACEHOLDER', '%APP_HOME%')
}
run {
doFirst {
jvmArgs = jvmArgs.grep {
!it.contains('APP_HOME_PLACEHOLDER')
}
jvmArgs = jvmArgs << "-javaagent:$weaver"
}
}
因此,当我使用此运行任务启动测试时,一切正常。 但问题是,当我右键单击测试并选择TestNG Run或Debug时,aspectj不会启动。
当我使用maven时,aspectjweaver作为argLine添加到maven-surefire-plugin并且每次都工作(调试,运行单个测试或执行mvn测试目标)。
那么,将JVM参数设置为AspectJ的实际版本的正确方法和地点是什么?我尝试在编辑配置中将aspecj.jar的路径添加为默认arg。这有效,但在这种情况下,我依赖于特定的缓存文件。
这可以在项目文件中的某处完成,而无需更改IDE配置吗?
更新
我尝试在build.gradle中添加测试任务:
def weaver = configurations.compile.find { it.name.contains("aspectjweaver") }
test {
useTestNG()
testLogging.showStandardStreams = true
println "Adding aspectJ weaver: ${weaver}"
jvmArgs = jvmArgs << "-javaagent:$weaver"
}
现在我在每个任务执行时看到这个输出(例如,当我运行干净任务时)。
但是当我右键单击test并选择Debug
时我没有看到输出。 当我选择使用TestNG运行一个测试时,看起来没有执行任务'test'。