Лучший способ упаковать Java-проект из командной строки - PullRequest
1 голос
/ 12 сентября 2011

Я создаю проект командной строки Java, без графического интерфейса.В проекте используется любое количество проектов с открытым исходным кодом: Spring, Logback, Commons CLI и т. Д. Когда я начал задумываться об упаковке, я подумал, что он получится в виде zip-файла, который может быть взорван в jar с подкаталогом lib.и зависимые банки в lib.

adapter.jar
 /lib/dependencyA.jar
 /lib/dependencyB.jar 
 etc.  

Я играл с Maven Assembly, но он по-прежнему не похож на описанный выше, и я не нашел примеров, которые генерируют структуру выше.Возможно ли это сделать?Кроме того, наличие многомодульной структуры добавляет еще один уровень сложности, который мне не удалось решить, поскольку сборочный модуль не может найти основной модуль в качестве зависимости.Это мой первый проект Maven, поэтому я все еще изучаю, как работает Maven.Я пролистал книгу Sonatype, но что-то упустил, так как даже с помощью раздела Best Practices не удалось разрешить отсутствующую зависимость.Примеры, которые я видел, обычно включают в себя объединение в исполняемый jar-файл uber, некоторые из которых используют проект Shade, другие - нет.Мой вопрос: хорошая ли идея сделать Uber Jar, включая сторонние библиотеки, такие как Spring и т. Д.?Или я должен продолжать с моим оригинальным планом подкаталога zip / lib?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

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

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

Если вы еще не видели книгу о сонате на maven, вот соответствующая глава: http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-best-practices.html

РЕДАКТИРОВАТЬ: сбежал из <'s ​​</p>

1 голос
/ 12 сентября 2011

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

...