在主 Jar 中引用 Jar 作为 javaagent 传递给 JVM

Reference Jar within main Jar to pass as javaagent to JVM

我需要在我的 JVM args 中添加一个 -javaagent 参数,当 运行ning jar1 时,引用 jar2 包含在 jar1 中。我试过:

-javaagent:BOOT-INF/lib/jetty-alpn-agent-2.0.0.jar"

没有成功。如何在 运行 时间确定 运行ning 系统中 JAR 的位置?

(这是为了 运行 jetty-alpn-agent-2.0.0.jar 作为 Java 代理 HTTP/2 与 Pushy APNs 一起使用)

如果您知道 class 在 class 路径上,您通常可以这样做:

URL jar = MainClass.class.getProtectionDomain().getCodeSource().getLocation();

Javaagent 始终加载在 class 路径上,这就是为什么您应该能够引用常规应用程序的主要 class。

@indusBull

对我有用的解决方案是在我的 gradle.properties 文件中定义一个名为 libDirectory 的 属性,这是 JAR 在 运行 系统,然后从我的 Dockerfile:

中引用该变量

gradle.properties

libDirectory = /opt/meanwhileinhell/app/lib

Dockerfile

ENTRYPOINT  ["java",\
            ...
            ...
            "-javaagent:${libDirectory}/jetty-alpn-agent.jar",\
            "-jar", "/app.jar"]