在 main Jar 中引用 Jar 作为 javaagent 传递给 JVM
Posted
技术标签:
【中文标题】在 main Jar 中引用 Jar 作为 javaagent 传递给 JVM【英文标题】:Reference Jar within main Jar to pass as javaagent to JVM 【发布时间】:2018-01-24 08:02:15 【问题描述】:我需要在运行 jar1 时在我的 JVM args 中添加一个 -javaagent
参数,但引用 jar1 中包含的 jar2。我试过了:
-javaagent:BOOT-INF/lib/jetty-alpn-agent-2.0.0.jar"
没有成功。如何在运行时确定 JAR 在运行系统中的位置?
(这是为了将 jetty-alpn-agent-2.0.0.jar
作为 Java 代理运行,用于 HTTP/2 与 Pushy APN 一起使用)
【问题讨论】:
你找到解决这个问题的方法了吗? 【参考方案1】:如果你知道类在类路径上,你通常可以这样做:
URL jar = MainClass.class.getProtectionDomain().getCodeSource().getLocation();
Javaagent 总是加载在类路径上,这就是为什么您应该能够引用常规应用程序的主类的原因。
【讨论】:
【参考方案2】:@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"]
【讨论】:
以上是关于在 main Jar 中引用 Jar 作为 javaagent 传递给 JVM的主要内容,如果未能解决你的问题,请参考以下文章
Java工程打成jar包(此工程引用的jar包也打进去),并指定main方法执行该怎么做?