Как включить внешние JAR-файлы в мой собственный Project JAR? - PullRequest
11 голосов
/ 16 сентября 2010

У меня есть приложение Java, я создал файл JAR и развернул его.

Приложение использует внешние JAR, такие как JAR Log4J. Как при создании файла JAR включить все внешние зависимые файлы JAR в мой архив?

Чтобы заставить мое приложение работать, я должен скопировать JAR Log4J в тот же каталог, что и мой собственный JAR, что в некотором роде побеждает назначение jar. Разве не было бы более элегантно иметь один файл JAR для развертывания?

Ответы [ 6 ]

6 голосов
/ 17 января 2013

Если вы используете Eclipse, вы можете извлечь все включенные файлы в один исполняемый jar-файл следующим образом:

  1. Щелкните правой кнопкой мыши по имени вашего проекта в Package Explorer и выберите Export.
  2. На экране «Экспорт» выберите «Java» -> «Запускаемый файл JAR» и «Далее».
  3. Заполните экран спецификации запускаемого файла JAR и нажмите Готово.

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

4 голосов
/ 16 сентября 2010

Вы можете использовать что-то вроде One-JAR , чтобы упаковать ваше приложение Java вместе с зависимостью в один исполняемый файл Jar (One-JAR использует собственный загрузчик классов, чтобы сделать возможным вложение JAR).

2 голосов
/ 16 сентября 2010

Лучше хранить отдельный JAR-файл, так как легко обновить только определенные JAR-файлы до новых версий, не затрагивая никакую другую конфигурацию.Что касается вопроса о необходимости копирования каждого файла в то же место, что и в вашем JAR, вы всегда можете использовать Java CLASSPATH и включить любой JAR в путь к классам вашего приложения.

2 голосов
/ 16 сентября 2010

Вы должны развернуть библиотеки jar в то же место, куда идут ваши скомпилированные классы, а затем сделать jar из этого. В зависимости от того, как настроен ваш процесс сборки, для этого может быть несколько способов. Это не ракетостроение - jar - это просто zip-архив с каталогом META-INF на корневом уровне.

0 голосов
/ 16 сентября 2010

Вы можете использовать сборочный плагин Maven + (http://maven.apache.org/plugins/maven-assembly-plugin/)

Кстати, возможно, это не самый простой способ, если вы не работали с Maven.

0 голосов
/ 16 сентября 2010

JAR сам по себе не способен вкладывать другие JAR-файлы, как вы обнаружили.

Традиционно можно распространять ZIP-архив или другой установщик, который будет разматывать JAR приложения (ваш), а также любые вспомогательные JARв соответствующем месте для доступа к classpath.Тогда часто приложение вызывалось через скрипт, который вызывал основной JAR и создавал classpath, в котором перечислены вспомогательные JAR.

Как отмечали другие авторы, у вас есть несколько вариантов создания супер-JAR, если эточто хочешь.

...