2013-10-11 2 views
1

У меня есть мультимодульный проект maven. Родительский POM и индивидуальный модуль pom работают нормально (потому что код в каждом модуле работает нормально, без какой-либо проблемы с зависимостями, и mvn:package запускается без каких-либо предупреждений/ошибок). Теперь мне нужно было создать банку для каждого модуля.Как создать самодостаточную (автономную) банку каждого модуля многомодульного проекта maven

Структура проекта с их зависимостями примерно как этот

ProjectABC 
| 
|--ModuleA 
|  |-Log4J 
|  |-Guava 
|  |-pom.xml 
| 
|--ModuleB 
|  |-ModuleA 
|  |-Commons 
|  |-pom.xml   
| 
| 
|--MoudleC 
|  |-ModuleB 
| 
|-pom.xml 

я последовал за этим Maven multi-module project - copying all "package" JARS from submodules into parent/target/

И, в состоянии получить всю банку моего суб-модуля в папку mouduleJars, но я не могу запустить ни потому что ни одна из зависимостей модуля не копируется в папку mouduleJars. Например, если module A не зависит от Log4J я не получаю log4j.jar в моей mouduleJars папке, ни LOG4J упакована внутри moduleA.jar

Вопрос

Как создать себя, содержащий (автономный модуль банок) в мультимодульном проекте. Или, как получить все зависимости в папке lib.

Временный обходной путь

Прямо сейчас, я использую мой IntelliJ IDEA язь, чтобы скопировать все зависимости (например, LOG4J, Гувава и т.д.) в Lib папку

и запускать Maven генерируемой moduleA.jar путем добавления папки lib к пути к классам. Это нормально, но мне не нравится этот ручной подход и хочет, чтобы maven позаботился об этом.

Ибо кто думают, что это дубликат или уже ответил и downvoters

Мой вопрос не просит Maven Assembly Submodules Multimodules Или это

Maven : Multimodule projects and versioning

Я уже потратил больше, чем в день пытаются получите эту работу с maven-assembly-plugin без каких-либо успехов.

Пожалуйста, дайте мне знать, если потребуется более подробная информация.

+0

Вы хотите, чтобы ProjectABC.jar со всеми зависимостями внутри? –

+0

Это тоже должно работать, если это можно сделать легко. – Watt

ответ

2

Если вы хотите, чтобы все зависимости в банках, вам нужно создать uberjar. Включение зависимостей в банку не так, как обычно работают банки. Убержар позволяет вам это сделать. Shade - это плагин, который строит один в java. Вы также можете сделать это следующим образом: How can I create an executable JAR with dependencies using Maven?

Если вы хотите создать папку Lib, вот ответ, который объяснит, как: force Maven2 to copy dependencies into target/lib

+0

Моя цель - выполнить код в ModuleB. Как видно из диаграммы, ModuleB также зависит от ModuleA. Пожалуйста, не стесняйтесь предлагать лучшее приложение – Watt

+0

Это прекрасный подход. Но, см. Мое редактирование. –

+0

+1, обе ссылки для ссылок, которые вы указали, выглядят многообещающими. Я попробую их и вернусь к вам. – Watt

0

Я сделал это с AppAssembler Maven плагин. Он автоматически копирует все необходимые зависимости и создает ярлыки для ваших основных классов. Это намного проще, чем другие плагины, которые я пробовал.

Для приложений uber-jar я использую maven-shade-plugin для слияния банкоматов в одну + proguard для сокращения, но AppAssembler намного быстрее и стабильнее в использовании.

Смежные вопросы