Ссылочный Jar в главном Jar для передачи в качестве javaagent JVM
Мне нужно добавить -javaagent
аргумент в моих аргументах JVM при запуске jar1, но ссылка на jar2, которая содержится в jar1. Я пытался:
-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 всегда загружается по пути к классам, поэтому вы должны иметь возможность ссылаться на основной класс обычного приложения.
@indusBull
Решение, которое работало для меня, состояло в том, чтобы определить свойство под названием libDirectory
в моем gradle.properties
файл, который был местом расположения JAR-файлов в работающей системе, а затем ссылаться на эту переменную из моего Dockerfile
:
gradle.properties
libDirectory = /opt/meanwhileinhell/app/lib
Dockerfile
ENTRYPOINT ["java",\
...
...
"-javaagent:${libDirectory}/jetty-alpn-agent.jar",\
"-jar", "/app.jar"]