Упаковка файла JAR в файл WAR - PullRequest
3 голосов
/ 01 августа 2011

У меня есть ряд зависимых Java-проектов. Я хотел бы упаковать их вместе в один файл JAR, который будет использоваться в моем файле WAR. Эти проекты зависят от большого количества внешних библиотек и проектов, таких как log4j, apache-commons и т. Д.

Я выбираю все проекты в Eclipse и экспортирую в виде файла JAR, затем копирую файл JAR в мою папку / WEB-INF / lib моей WAR, затем развертываю мое приложение. У меня следующие проблемы:

  1. ClassNotFoundException. Веб-приложение не может найти библиотеки, упакованные в мой файл JAR. Я решил эту проблему, переместив все зависимые библиотеки в папку / WEB-INF / lib и добавив записи пути к классам в файл MANIFEST.MF JAR, что является весьма болезненным процессом.

  2. Классы в файле JAR не могут найти файлы свойств, упакованные в JAR. Как мне решить эту проблему?

Есть ли стандартное решение этих проблем? Спасибо.

Ответы [ 3 ]

4 голосов
/ 01 августа 2011

Я бы порекомендовал использовать то, что делает автоматическое управление зависимостями для вас. Если у вас уже есть муравей для сценария сборки, ivy - отличное решение. Если у вас нет скрипта сборки, возможно, стоит изучить maven.

Управление зависимостями автоматически извлекает переходные зависимости для зависимостей (jar), которые вы используете напрямую.

0 голосов
/ 15 января 2019

У меня была такая же проблема с развертыванием.Чтобы решить, я просто изменил свойства проекта:

  • Щелкните правой кнопкой мыши на проекте
  • Выберите «Свойства» -> «Сборка развертывания» -> «Добавить» -> «Записи пути сборки Java»
  • Выберите все библиотеки, которые вы хотите добавить в свое веб-приложение

Если все сделано правильно, это автоматически добавит внешнюю библиотеку .jar в ваш.war файл.

0 голосов
/ 01 августа 2011

Стандартное решение этой проблемы - поместить все файлы jar, от которых вы зависите, в папку WEB-INF / lib.То, что вы ищете, является нестандартным решением.

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

...