在 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();
}
}
如您所见,第二种解决方案非常难看。我最好选择第一种方法。
这是我的 运行 配置。
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();
}
}
如您所见,第二种解决方案非常难看。我最好选择第一种方法。