2016-01-28 237 views
1

以下設置:Maven的:裝配兒童項目(模塊)在多模塊項目

rootpom 
|- parentpom 
| |- projectApom 
| |- projectBpom 
| |- other projects poms 
|- other projects poms 

層次結構中的每個項目都是通過使用<模塊>標記在它的父POM以及父約束被指定父母>標記<。

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

現在我去rootpom的目​​錄,然後執行:

mvn --projects parent/projectB compile assembly:single 

的問題是,現在項目B取決於

項目A和項目B使用的片段都指定Assembly插件A(和其他一些)所以使用這個命令assembly:single將適用於所有項目。

所以問題是如何編譯多個項目(依賴關係),只彙編一個(最後一個)?

回答

0

簡單:不要在命令行上使用assembly:single,但會將maven-assembly-plugin的執行綁定到所需項目的特定階段。

如果你只想要組裝唯一項目B,則在B的POM,你會:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <archive> 
      <manifest> 
      <mainClass>ClassToExecute</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

這樣,運行mvn --projects parent/projectB clean package將只包B.

+0

但將它也編譯依賴關係好?它們的當前版本中未安裝依賴項。 –

+0

@MartinKersten如果它們是同一個多模塊項目的模塊,那麼它會起作用。 – Tunaki

+0

我試過了,失敗了。它告訴我沒有發現依賴關係。所以它不會重新創建依賴模塊。我不確定這是因爲我使用了:「--project parentpom/projectApom」,這是項目的rootpom/parentpom/projectApom,依賴項缺失是rootpom/otherPom。但是從mvn計劃中可以看出,它只是想構建projectApom的其他依賴關係。 –