在Gradle中为特定任务设置javaagent

Mal*_*aYa 6 javaagents gradle

这是我的运行配置.

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

但它给了我:

Could not find method jvmArgs()
Run Code Online (Sandbox Code Playgroud)

你如何为jettyRun设置javaagent?

mad*_*ead 5

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

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

第二种方法很难。您不能只是生成新的 JVM 并对其说“运行此 Gradle 任务”。我猜您需要使用Gradle Tooling API根据您现有的构建配置通过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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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