2015-12-09 2 views
2

У меня есть проект maven, с основным проектом A и модулями B и C. Дети наследуют от pom.maven multimodule project: можно ли jar-with-dependencies?

A 
| 
|----B 
| |----pom.xml 
| 
|----C 
| |----pom.xml 
| 
|----pom.xml 

Он уже строит банки для всех модулей. Есть ли способ включить зависимости в эти банки? Например. поэтому я получаю B-1.0-with-dependencies.jar и C-1.0-with-dependencies.jar? Я попытался установить

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 

В родительском ПОМ, но это, кажется, не делать ничего: сборка прошла успешно, но я получаю регулярные, банки не-зависимости.

Я бы хотел избежать помех в каждом дочернем помпе, так как на самом деле у меня более двух модулей. Я уверен, что есть какой-то способ сделать это, но не может показаться, что он работает с документами maven. Благодаря!

ответ

2

Вот как я заработал.
В агрегатор/родительском ПОМ Я настроил:

<properties> 
    <skip.assembly>true</skip.assembly> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <skipAssembly>${skip.assembly}</skipAssembly> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Обратите внимание на skip.assembly свойство, которое устанавливается по умолчанию true. Это означает, что сборка не будет выполнена у родителя, что имеет смысл, поскольку родитель не предоставляет никакого кода (с упаковкой pom).

Затем в каждом модуле я настроил просто следующее:

<properties> 
    <skip.assembly>false</skip.assembly> 
</properties> 

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

Пожалуйста, обратите внимание на конфигурацию сборки на родителе, я добавил execution на вершине конфигурации вы предусмотрели, так что сборка плагин запускается автоматически при вызове mvn clean package (или mvn clean install).

+1

Фантастический! Одна заметка для всех, кто работает в этом: я хотел скопировать банки в основной массив 'target /', используя ' jar-with-dependencies'. Для этого мне пришлось добавить плагин maven-assembly-плагин перед плагином maven-dependency в родительском pom, иначе jar-with-dependencies не были созданы до того, как maven попытался скопировать его. Не знал, что плагин имеет значение! –

+0

Это не сработало для меня. Я использую сборку plugin v3.1. Любая идея, почему это возможно? –

+0

Он работал, когда я использовал: 'mvn clean compile assembly: single' вместо' mvn package'. Возможно, шаг сборки не был подключен к шагу пакета, я не уверен. –