管理使用 Gradle 构建的 Java 项目中的 javaagent 依赖项

Dor*_*dus 6 java javaagents gradle open-telemetry

对于需要 javaagent(例如 OpenTelemetry)的系统,文档通常以“从此 URL 下载代理 JAR 并将其添加到命令行”开头。在使用 Maven Central 很好地处理库依赖关系并具有稳定版本控制等的世界中,相比之下,“下载 JAR”方法似乎原始且不安全。

在使用 Gradle 构建的项目中获取 javaagent 库的最佳实践是什么?“下载这个 jar”真的是当前最先进的技术吗?

我现在对 OpenTelemetry 特别感兴趣。如果有一个只适用于 OpenTelemetry 的答案(例如 Gradle 插件),我会洗耳恭听。

lpr*_*shv 1

根据我所做的研究,有一个gradle 插件专门用于将 Maven 依赖项附加为 javaagent。

引用自插件github存储库:

该 Gradle 插件与 Gradle 应用程序插件紧密集成,使您可以轻松地通过 Gradle 构建应用程序!只需注册javaagent-application插件,然后在依赖项块中指定您想要附加的 javaagent

otel java 代理的示例用法可以在此处的同一存储库中找到

plugins {
    id("com.ryandens.javaagent.example.java-application-conventions")
    id("com.ryandens.javaagent-otel-modification")
    id("com.ryandens.javaagent-application")
}

dependencies {
  otel("io.opentelemetry.javaagent:opentelemetry-javaagent:1.13.1")
  otelExtension("io.opentelemetry.contrib:opentelemetry-samplers:1.13.0-alpha")
  otelInstrumentation(project(":custom-instrumentation", "shadow"))
}

application {
    // Define the main class for the application.
    mainClass.set("com.ryandens.javaagent.example.App")
    applicationDefaultJvmArgs = listOf("-Dotel.javaagent.debug=true", "-Dotel.metrics.exporter=none")
}

/*
  see https://github.com/johnrengelman/shadow/issues/713
  Currently, tasks that consume the output of the extendedAgent shadowJar task need to be made aware of
  the implicit dependency (https://docs.gradle.org/7.4.2/userguide/validation_problems.html#implicit_dependency)
  due to an issue with the shadowJar plugin
*/
setOf(tasks.distTar, tasks.distZip).forEach {
  it.configure {
    dependsOn(tasks.extendedAgent)
  }
}
Run Code Online (Sandbox Code Playgroud)