在主 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"]
我需要在我的 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"]