gradle - 在 Gradle 中为特定任务设置 javaagent

标签 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?

最佳答案

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

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

关于gradle - 在 Gradle 中为特定任务设置 javaagent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31027421/

相关文章:

android - 为什么任务包装函数不起作用

java - Gradle-是否可以在初始化之前执行检查?

groovy - 如何获取 Gradle 分离配置以使用依赖锁定插件中的解析策略?

java - 检测 ApachHttpClient 时出现 ASM 5.2 : Java. lang.linkage 错误

适用于 Java 的 Azure Application Insights 代理导致无法在 JBoss 18 上找到或加载主类 %JAVA_OPTS

android - 无法使用 robolectric gradle 插件确定所有任务的依赖关系

java - Java Instrumentation Agent 是否支持类中的新方法定义?

java - 如何捕获java程序中的读取和写入?

java - 字节好友的方法委托(delegate)导致StackOverflowError

android - 在 Android 项目中使用 Espresso 2.0 + Roboelectric