Объединение нескольких банок в единую банку

Мое приложение нуждается в нескольких банках для работы. Поскольку это настольное приложение, я не могу удержать пользователя, ответственного за установку. Таким образом, в моей сборке script я разархивирую содержимое jars в мой каталог сборки, удаляю файлы манифеста, скомпилируем свое программное обеспечение и снова заправлю его. Все работает так, как должен мой вопрос, есть ли какие-либо долгосрочные побочные эффекты для этого процесса?

Ответ 1

В прошлом были JAR со странным контентом (например, с драйвером DB2, который содержит com.ibm и com.ibm; после распаковки в файловой системе Windows эти два пакета будут объединены).

Единственная проблема, о которой вам нужно знать, - это подписанные банки и другие файлы в META-INF, которые могут иметь одно и то же имя в нескольких исходных JAR файлах.

Простым решением для всех этих проблем является использование One-JAR. Это позволяет объединить несколько JAR в один, не распаковывая их, в первую очередь. И прочитайте этот ответ: Самый простой способ объединить выпуск в один файл JAR

Ответ 2

Более простое решение (IMO) использует плагин сборки Maven, который также описан в одном из ответов на другой вопрос, который был связан в предыдущем Q & A. Это означает, что вы используете Maven (который является рекомендуемым инструментом по своему усмотрению) в качестве инструмента сборки.

Ответ 3

Еще один отличный вариант - ProGuard, который также может сжимать и/или обфускацию кода.

Ответ 4

Если некоторые из флагов подписаны, вы теряете подпись, распаковывая/переупаковывая ее.

Ответ 5

Если вы хотите, чтобы конечный пользователь не запускал программу с несколькими зависимостями jar, вы можете посмотреть Launch4j или Jsmooth (я предпочитаю Launch4j). Оба являются программами, которые создают исполняемые файлы, которые объединяют jar (s) и JRE вместе, чтобы конечный пользователь выглядел иначе, чем любой другой исполняемый файл.

Ответ 6

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

Ответ 7

Хорошо, вы выбрасываете МАНИФЕСТ из своих сторонних банок, чтобы это могло вызвать у вас проблемы. Например, вы можете вызвать проблемы безопасности, выбросив атрибут "Запечатанный".

Почему бы просто не создать простой установщик и script, чтобы запустить приложение, которое правильно устанавливает CLASSPATH?

Ответ 8

One-JAR выполнит эту работу и выпустит новую версию (0.97), которая поддерживает такие фреймворки, как Spring и Guice, которые теперь теперь упаковывают в One-JAR-архивы. http://one-jar.sourceforge.net

Ференц Хехлер также проделал большую работу в Eclipse с помощью мастера экспорта Eclipse: мы работали вместе над FatJar/One-JAR, из которого работа Eclipse росла, и я могу рекомендовать это как подход, хотя я не знаю, как хорошо он обрабатывает рамки.