【问题标题】:How to apply javaagent to gretty plugin based on gradle command line?如何基于 gradle 命令行将 javaagent 应用于 gretty 插件?
【发布时间】:2017-01-12 01:02:24
【问题描述】:

这个问题是具体的,但它更像是一个笼统的“如何在 gradle 中做到这一点”的问题。

我有一个演示 java web 应用程序,我可以使用 gretty 插件运行它。我想根据命令行标志有选择地控制是否将 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

【问题讨论】:

    标签: gradle


    【解决方案1】:

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

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

    那么我可以简单地调用:

    gradle agent appRunWar
    

    【讨论】:

      【解决方案2】:

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

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多