簡體   English   中英

在使用 Gradle 構建的 Java 項目中管理 javaagent 依賴項

[英]Manage javaagent dependencies in a Java project built with Gradle

對於需要 javaagent(例如 OpenTelemetry) 的系統,文檔通常以“從此 URL 下載代理 JAR 並將其添加到命令行”開頭。 在使用 Maven Central 可以很好地處理庫依賴關系的世界中,具有穩定的版本控制等,相比之下,“下載 JAR”方法似乎原始且不安全。

在使用 Gradle 構建的項目中獲取 javaagent 庫的最佳實踐是什么? “下載這個 jar”真的是當前 state 的藝術嗎?

我現在對 OpenTelemetry 特別感興趣。 如果有一個僅適用於 OpenTelemetry 的答案(例如 Gradle 插件),我會全力以赴。

根據我所做的研究,有一個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)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM