Как включить внешние JAR в свой собственный JAR Project

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

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

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

Ответ 1

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

  • Щелкните правой кнопкой мыши имя вашего проекта в Проводнике пакетов и выберите "Экспорт".
  • В окне "Экспорт" выберите Java → Runnable JAR file и Next.
  • Заполните экран "Runnable JAR File Spec" и "Готово".

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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