在 Gradle 中为特定任务设置 javaagent

Setting javaagent for particular task in Gradle

这是我的 运行 配置。

task run << {
    jvmArgs "-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar"
    jettyRun.execute()
}

但它给了我:

Could not find method jvmArgs()

如何为 jettyRun 设置 javaagent?

试试看。

任务 运行(类型:JavaExec)<< { ...

因为 jvmArgs 仅在 JavaExec 任务中已知。

不幸的是,Gradle 运行Jetty 在它自己的 JVM 中,因此您不能只为特定任务设置 javaagent。它是为整个 JVM 设置的。所以,你有两种方法来完成你想要的:要么你 运行 Gradle 本身启用了 javaagent,要么你生成另一个 JVM 进程和其中的 运行 Jetty。

第一个解决方案非常简单:像往常一样提供选项。例如,将 org.gradle.jvmargs = "-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar" 放入 gradle.properties

第二种方式比较难。您不能只生成新的 JVM 并对它说 "run this Gradle task"。我猜你需要使用 Gradle Tooling API to spawn new process based on your exising build config via GradleConnector:

task run << {
    ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File("someProjectFolder")).connect();

    try {
        BuildLauncher build = connection.newBuild();

        build.setJvmArguments("-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar")

        build.forTasks("jettyRun").run();
    } finally {
        connection.close();
    }
}

如您所见,第二种解决方案非常难看。我最好选择第一种方法。