问题是具体的,但更多的是一般性的'如何在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
答案 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
}