我有一个具有以下结构的gradle项目:
rootDir
|--agent-v1.0.0
|--agent.jar
|--proj1
|-- // other project files
|--build.gradle
|--proj2
|-- // other project files
|--build.gradle
|--build.gradle
我想为所有子项目运行test.jvmArgs = ['javaagent:agent-v1.0.0/agent.jar']
,所以我在根build.gradle
中编写了以下任务:
subprojects {
task cs {
outputs.upToDateWhen { false }
dependsOn test.jvmArgs = ['javaagent:../agent-v1.0.0/agent.jar']
}
}
但这失败了:
无法确定任务':proj1'的依赖关系。
在项目':proj1'中找不到路径为'javaagent:../ agent-v1.0.0 / agent.jar'的任务。
我已经通过将agent-v1.0.0放在根目录和每个项目中进行了尝试,但仍然失败。我想念什么?
答案 0 :(得分:2)
为什么要用新的task
包装该逻辑?然后将收益从jvmArgs
传递到dependsOn
?
只需正确配置测试任务:
subprojects {
tasks.withType(Test) {
jvmArgs "-javaagent:${project.rootDir}/agent-v1.0.0/agent.jar"
}
}
答案 1 :(得分:2)
一个任务可以依赖于另一个任务。因此dependsOn
期望任务作为参数。 test.jvmArgs = ['javaagent:../agent-v1.0.0/agent.jar']
不是任务。
如果要配置所有子项目的所有测试任务以具有其他jvm args,则语法应为
subprojects {
// this block of code runs for every subproject
afterEvaluate {
// this block of code runs after the subproject has been evaluated, and thus after
// the test task has been added by the subproject build script
test {
// this block of code is used to configure the test task of the subproject
// this configures the jvmArgs property of the test task
jvmArgs = ['javaagent:../agent-v1.0.0/agent.jar']
}
}
}
但不要复制并粘贴此代码。阅读年级用户指南,并学习其基本概念。