Я работаю с очень старым монолитным программным обеспечением, которое в основном представляет собой сильно настроенное развертывание JBoss. К сожалению, это означает, что JBoss не может быть запущен из представления «Серверы» в Eclipse, его нужно запускать как службу Windows или через командную строку. Существует несколько WAR / EAR, но загрузчики классов WAR используются редко, и большинство фактических файлов классов расположены в jboss / shared / lib как .jars.
Нам нужен способ запустить сборку Maven в Eclipse (через m2e) и развернуть файлы классов в полученном .jar в C: / product / jboss / shared / lib, чтобы при запуске JBoss мы могли использовать Eclipse для отладки ( как удаленное Java-приложение). В идеале артефакт, который отправляет Maven, не перезаписывает существующий файл .jar, который был изначально установлен. Например, если проект Maven создает артефакт с именем myjar-1.0.0.jar, нам нужен способ развертывания классов внутри myjar-1.0.0.jar в C: / product / jboss / shared / lib / classes, чтобы что они подхватываются загрузчиком классов до C: /product/jboss/shared/lib/myjar-1.0.0.jar, который был установлен вместе с продуктом.
В настоящее время наше (очень хакерское) решение таково:
На вкладке
Java Build Path
>Source
конфигурации проекта мы используем функцию «символической ссылки» вAdvanced
для сопоставленияDefault Output Directory
(например, проекта / цели / классов) с папкой класса (например, C: / product / jboss / shared / lib / classFolder). Это изменяет файл .project, который проверяется в системе управления версиями.- Мы обычно строим проект с помощью программы запуска m2e (например, чистая установка).
Предполагая, что сборка Maven прошла успешно, мы запускаем сборку проекта Eclipse. Это помещает файлы классов в C: / product / jboss / shared / lib / classFolder:
- Перезапускаем JBoss. Поскольку classFolders имеют приоритет над jar-файлами, JBoss загрузит классы в C: / product / jboss / shared / lib / classFolder, которые идентичны классам в нашей рабочей области Eclipse.
- Подключаемся к JBoss и отлаживаем проект как удаленное java-приложение.
Плюсы:
- Мы можем отправить наши новые классы в JBoss и протестировать их без резервного копирования исходных jar-файлов и копирования / вставки новых вручную (jar hell).
Минусы:
- Мы компилируем дважды - один раз с помощью maven-compiler-plugin и один раз с помощью сборки проекта Eclipse (Java Builder).
- По моему опыту, функциональность символической ссылки попалась или пропала. Иногда нам нужно выполнить танец «обновить проект / закрыть проект / построить проект», чтобы заставить его работать.
Есть ли лучший способ сделать это? Я не могу заставить их реструктурировать проект настолько сильно, чтобы все развертываемые объекты не зависели от контейнеров WAR, но наши разработчики должны иметь возможность вносить изменения и быстро тестировать их без вручную скопировать / вставить .jars.