SBT Native Packager 的条件 JavaAgent 命令
Posted
技术标签:
【中文标题】SBT Native Packager 的条件 JavaAgent 命令【英文标题】:Conditional JavaAgent Command for SBT Native Packager 【发布时间】:2021-04-13 14:57:52 【问题描述】:我正在使用 scala、sbt、sbt-native-package 和可能的 sbt-java-agent 在运行时使用 kubernetes 有条件地激活 datadog java 代理。
通过将dd-java-agent
添加为依赖项并添加脚本sn-p,我只能在特定环境时激活datadog。变量已设置,但这也将 dd-java-agent 添加到类路径中,这是我试图避免的:
val DataDogAgentVersion = "0.70.0"
libraryDependencies += "com.datadoghq" % "dd-java-agent" % DataDogAgentVersion % "runtime"
bashScriptExtraDefines += """if [ "$DD_PROFILING_ENABLED" = "true" ]; then addJava "-javaagent:$app_home/../lib/dd-java-agent-""" + DataDogAgentVersion + """.jar"; fi""""
有没有办法让 sbt 管理 dd-java-agent.jar 的下载,将这个 jar 包含在 lib
目录中(如果需要的话,可以使用其他目录),但从类路径中排除?
我尝试使用 sbt-java-agent
将 jar 放入 dd-java-agent
目录并从类路径中排除 jar,但我无法弄清楚如何将 addJava
语句包装在 if
中检查何时使用那个插件。
感谢您提供的任何帮助!
【问题讨论】:
【参考方案1】:我最终选择了 sbt-javaagent
插件以避免额外的代码将代理 jar 从插件自动处理的类路径中排除。
技巧/hack 是过滤掉默认的addJava -javaagent
line the sbt-javaagent
plugin adds automatically,然后附加一个新的脚本片段以仅在某个环境时启用 javaagent。变量已设置。
lazy val dataDogAgentName = "dd-java-agent"
lazy val dataDogAgentVersion = "0.70.0"
lazy val distProject = project
.enablePlugins(JavaAgent, JavaAppPackaging)
.settings(
javaAgents += "com.datadoghq" % dataDogAgentName % dataDogAgentVersion,
bashScriptExtraDefines := bashScriptExtraDefines.value.filterNot(_.contains("javaagent")) :+ s"""
|if [[ "$$DD_PROFILING_ENABLED" = "true" ]]; then
| addJava "-javaagent:$$app_home/../$dataDogAgentName/$dataDogAgentName-$dataDogAgentVersion.jar";
|fi
|""".stripMargin,
)
【讨论】:
感谢分享这个 但最后你是如何传递代理参数的?.settings( javaAgents += JavaAgent("com.datadoghq" % dataDogAgentName % dataDogAgentVersion, arguments = "my agent arguments") )
-> 似乎在末端被覆盖,将它们直接放入自定义脚本中也不起作用。
嗨@Xorr,在我的场景中,我不需要传递任何自定义参数,但我认为您可以通过在自定义脚本 javaagent 字符串的末尾添加一个冒号来附加它们。 addJava "-javaagent:$$app_home/../$dataDogAgentName/$dataDogAgentName-$dataDogAgentVersion.jar:custom-args";
以上是关于SBT Native Packager 的条件 JavaAgent 命令的主要内容,如果未能解决你的问题,请参考以下文章
Scala - SBT - sbt-native-packager - 保留 `stage` 目录的内容
在 SBT 中为 sbt-native-packager 的 packageMappings 构建路径