Gradle:在项目中找不到路径的任务

时间:2018-09-28 14:13:22

标签: java gradle javaagents

我有一个具有以下结构的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放在根目录和每个项目中进行了尝试,但仍然失败。我想念什么?

2 个答案:

答案 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']
        }
    }
}

但不要复制并粘贴此代码。阅读年级用户指南,并学习其基本概念。