2014-07-18 146 views
1

我有一個多模塊maven項目:模塊A依賴於模塊B.當模塊B建立時,它命名爲ModuleB.jar並複製到目標目錄。現在,在模塊A的POM我必須把maven多模塊依賴版本

<dependency> 
    <groupid>com.mycompany.app</groupid> 
    <artificatId>ModuleB</artifactId> 
    <version>1.0</version> 
</dependency> 

我必須把版本號,但那麼現在我有兩個相同的模塊B瓶:ModuleB.jar(在名稱中沒有版本)和ModuleB-1.0.jar在沿有ModuleA.jar目標目錄。

我更喜歡從罐子的最後名稱保持版本號了,因爲我們還有其他遺留應用程序依賴於這些罐子

反正有添加模塊B作爲沒有版本號的模塊A的POM的依賴?任何干淨的解決方案,或者我只是讓自己生活困難?

編輯: 澄清:這些模塊是從父pom作爲jar包構建的,並且將它們及其依賴關係複製到項目父目錄之外的目標目錄。因此,有兩個ModuleB JAR的原因:一個是當模塊B被編譯和打包時,最終名稱被設置爲ModuleB.jar,另一個是當模塊A與其依賴關係一起被編譯和打包,其中包括模塊B但名稱爲ModuleB- 1.0.jar

謝謝!

複製的依賴執行(我可以帶出副本中的版本,但我會失去對第三方jar文件的版本,如春瓶= /):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${build.dir}/lib</outputDirectory> 
       <overWriteIfNewer>true</overWriteIfNewer> 
       <stripVersion>false</stripVersion> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+1

作爲一個起點,如果它是一個多模塊項目,所有模塊都使用相同的版本構建,那麼您應該能夠指定$ {project.version},而不必一直更新。我不認爲這會解決你的實際問題。這兩個moduleB jar是否相同(如同樣的校驗和所有內容)只是名稱不同? –

+0

@GerardRyan是的ModuleB罐子是完全相同的只是不同的名稱。看看我編輯的編輯,它會解釋發生了什麼 –

+0

你可以包括你用來複制依賴關係的父pom xml嗎?我認爲解決方案可能會從依賴副本中排除模塊B. –

回答

1

所以,問題是,我我複製了兩次內部模塊:一次運行maven-jar-plugin(在finalname中沒有版本),一次運行maven-dependency-plugin,兩個插件都輸出到相同的目標目錄,給我ModuleB.jar和ModuleB- 1.0.jar。

所以在父POM我配置的插件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <outputDirectory>${build.dir}/lib</outputDirectory> 
    </configuration> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${build.dir}/lib</outputDirectory> 
       <overWriteIfNewer>true</overWriteIfNewer> 
       <stripVersion>false</stripVersion> 
       <excludeGroupIds>com.mycompany.app</excludeGroupIds> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

的第一個插件是建立我的所有子模塊,並將其jar'ing到指定的輸出目錄。第二個插件是複製我的所有模塊的依賴項到第一個插件中的相同輸出目錄無內部模塊使用<excludeGroupIds>

感謝您幫助我意識到有一個簡單的解決方案!