Ссылочный 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"]
Другие вопросы по тегам