Развернуть артефакты Maven в ‹container› / shared / lib для отладки Eclipse?

Я работаю с очень старым монолитным программным обеспечением, которое в основном представляет собой сильно настроенное развертывание 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, который был установлен вместе с продуктом.

В настоящее время наше (очень хакерское) решение таково:

  1. На вкладке Java Build Path> Source конфигурации проекта мы используем функцию «символической ссылки» в Advanced для сопоставления Default Output Directory (например, проекта / цели / классов) с папкой класса (например, C: / product / jboss / shared / lib / classFolder). Это изменяет файл .project, который проверяется в системе управления версиями.

    безумие символической ссылки

  2. Мы обычно строим проект с помощью программы запуска m2e (например, чистая установка).
  3. Предполагая, что сборка Maven прошла успешно, мы запускаем сборку проекта Eclipse. Это помещает файлы классов в C: / product / jboss / shared / lib / classFolder:

    classFolder

  4. Перезапускаем JBoss. Поскольку classFolders имеют приоритет над jar-файлами, JBoss загрузит классы в C: / product / jboss / shared / lib / classFolder, которые идентичны классам в нашей рабочей области Eclipse.
  5. Подключаемся к JBoss и отлаживаем проект как удаленное java-приложение.

Плюсы:

  • Мы можем отправить наши новые классы в JBoss и протестировать их без резервного копирования исходных jar-файлов и копирования / вставки новых вручную (jar hell).

Минусы:

  • Мы компилируем дважды - один раз с помощью maven-compiler-plugin и один раз с помощью сборки проекта Eclipse (Java Builder).
  • По моему опыту, функциональность символической ссылки попалась или пропала. Иногда нам нужно выполнить танец «обновить проект / закрыть проект / построить проект», чтобы заставить его работать.

Есть ли лучший способ сделать это? Я не могу заставить их реструктурировать проект настолько сильно, чтобы все развертываемые объекты не зависели от контейнеров WAR, но наши разработчики должны иметь возможность вносить изменения и быстро тестировать их без вручную скопировать / вставить .jars.


person Justin Garrick    schedule 23.04.2012    source источник


Ответы (3)


Сколько лет?

Вы смотрели плагин Cargo? http://cargo.codehaus.org/Quick+start

Его можно развернуть на JBoss 3.x. У него есть Java API, поэтому вы должны иметь возможность написать что-нибудь, чтобы расширить его, чтобы делать то, что вы хотите.

Почему вы пытаетесь развернуть классы вместо файлов jar? Вы по-прежнему можете выполнять удаленную отладку через Eclipse с файлами jar.

В худшем случае - используйте Ant. Maven не предназначен для такого рода вещей, попытка заставить его работать только вызовет у вас боль.
После того, как Maven сгенерировал нужные артефакты, определите, что вы будете делать вручную, а затем запишите его через Ant.

person Bae    schedule 11.07.2012
comment
Какой из них вы в конечном итоге выбрали? - person Bae; 27.07.2012

Я бы попробовал посмотреть на maven-dependency-plugin с возможностью копирования артефактов в другое место.

person khmarbaise    schedule 23.04.2012

Пожалуйста, проверьте свою сборку развертывания (проект -> свойства -> сборка развертывания) и проверьте, есть ли там ваши библиотеки maven.

person Marcos Muniz    schedule 09.07.2012