如何基于gradle命令行将javaagent应用于gretty插件?

时间:2017-01-12 01:02:24

标签: gradle

问题是具体的,但更多的是一般性的'如何在gradle'问题中这样做。

我有一个可以使用gretty插件运行的演示java Web应用程序。我想根据命令行标志有选择地控制javaagent是否应用于gretty进程的jvmArgs。通过从虚拟配置获取其路径,已知代理jar位置:

configurations {
    agent
}
dependencies {
   ...
    agent group: 'com.foo', name: 'foo-agent', version: '1.0'
}

我知道我可以使用以下内容访问jar文件位置:

project.configurations.agent.find { it.name.startsWith("foo-agent") }

如何根据命令行属性(例如

)有选择地将其应用于gretty jvmArgs配置
gradle -PenableAgent

2 个答案:

答案 0 :(得分:0)

我最终通过创建一个任务来解决这个问题,并在我开战之前简单地调用它:

task agent {
    doFirst {
        def agentJar = project.configurations.agent.find { it.name.startsWith("foo-agent") }
        gretty.jvmArgs << "-javaagent:" + agentJar 
    }
}

然后我可以简单地打电话:

gradle agent appRunWar

答案 1 :(得分:0)

在我的项目中,我使用Spring Instrument作为java代理,所以这是我的解决方案。 您可以使appRun任务依赖于代理任务,然后不需要额外的gradle run参数。

dependencies {
    ...
    agent 'org.springframework:spring-instrument:4.2.4.RELEASE'
}

configurations {
    dev
    agent
}
gretty {
    ...
    contextPath = '/'
    jvmArgs=[]
    springBoot = true
    ...
}
task agent {
    doFirst {
        def agentJar = project.configurations.agent.find{it.name.contains("spring-instrument") }
        gretty.jvmArgs << "-javaagent:" + agentJar
    }
}
project.afterEvaluate {
    tasks.appRun.dependsOn agent
}