Как развернуть javaagent с зависимостями сторонних библиотек

Мы написали javaagent, чтобы помочь разработчикам в отладке. Но, прежде чем выпустить этот инструмент, у нас остались вопросы по развертыванию java-агента.

Пользователь может использовать агент с некоторыми приложениями tomcat. Агент использует метод Premain для преобразования классов. Мы используем javassist 3.18.2-GA для вставки кодов. В настоящее время мы добавляем javassist.jar в Boot-Class-Path в MANIFEST.MF. И мы помещаем и агент, и javassist.jar в каталог lib tomcat.

Вопросы:

  1. Ну, как минимум, работает. Но правильный ли это способ развертывания агентов и зависимостей для приложений Tomcat?
  2. Поскольку большинство приложений tomcat используют спящий режим, который также использует javassist 3.18.2-GA, так что сейчас все в порядке. Но насколько я понимаю, 3.20 не полностью совместима с 3.18.2. Предложите, чтобы кто-то обновил javassist до более высокой версии, не произойдет ли сбой агента или приложения из-за конфликта между двумя разными javassist.

person Meilun Sheng    schedule 24.08.2016    source источник


Ответы (1)


Агент javaagent добавляется и запускается на пути к классам виртуальной машины. Поэтому у вас есть следующие варианты:

  1. Добавьте зависимости в путь к классам при запуске виртуальной машины, как при развертывании обычного приложения. Для контейнера приложения, такого как Tomcat, это будет подходящий каталог для таких зависимостей.
  2. Свяжите зависимости с агентом, используя такой инструмент, как fatjar. При этом вы также можете использовать подключаемый модуль Maven Shade для переноса зависимостей в другое пространство имен, чтобы избежать конфликтов версий.
  3. Используйте Instrumentation API для ручного добавления зависимостей перед запуском фактического приложения агента.
person Rafael Winterhalter    schedule 24.08.2016