Мое приложение нуждается в нескольких банках для работы. Поскольку это настольное приложение, я не могу удержать пользователя, ответственного за установку. Таким образом, в моей сборке 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 росла, и я могу рекомендовать это как подход, хотя я не знаю, как хорошо он обрабатывает рамки.