在Gradle中为特定任务设置javaagent

时间:2015-06-24 13:05:53

标签: gradle javaagents

这是我的跑步配置。

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

但它给了我:

Could not find method jvmArgs()

如何为jettyRun设置javaagent?

2 个答案:

答案 0 :(得分:4)

不幸的是,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();
    }
}

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

答案 1 :(得分:2)

试试。

任务运行(类型:JavaExec)&lt;&lt; {...

因为jvmArgs只在JavaExec Task中已知。