2012-01-17 52 views
2

我觀察到Maven 2和Maven 3之間的變化行爲。這是一個bug還是一個特性?我找不到在Maven 3.x Compatibility NotesMaven 3迴歸:配置文件相關性丟失?

什麼我使用兩種不同的配置文件在多模塊項目添加依賴於不同的環境。

父-POM:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>group</groupId> 
    <artifactId>main</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

    <modules> 
     <module>common</module> 
     <module>portal</module> 
    </modules> 
</project> 

共同-POM在它的配置文件:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>group</groupId> 
    <artifactId>common</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0.0-SNAPSHOT</version> 
    <parent> 
     <groupId>group</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 
    <profiles> 
     <profile> 
      <id>development</id> 
      <dependencies> 
       <dependency> 
        <groupId>log4j</groupId> 
        <artifactId>log4j</artifactId> 
        <version>1.2.14</version> 
       </dependency> 
      </dependencies> 
     </profile> 
     <profile> 
      <id>production</id> 
      <dependencies> 
       <dependency> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
        <version>1.1.1</version> 
       </dependency> 
      </dependencies> 
     </profile> 
    </profiles> 
</project> 

門戶-POM只有共同的依賴,應該包括從普通的傳遞依賴模塊:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>group</groupId> 
    <artifactId>portal</artifactId> 
    <packaging>war</packaging> 
    <version>1.0.0-SNAPSHOT</version> 
    <parent> 
     <groupId>group</groupId> 
     <artifactId>main</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 
    <dependencies> 
     <dependency> 
      <groupId>group</groupId> 
      <artifactId>common</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
</project> 

通過Maven2構建此項目(從父項)mvn -P production package導致包含傳遞依賴的WAR。 (我用簡單的再現那些簡單的依賴) 通過Maven3執行,我得到的只有在戰爭中common.jar,但不是傳遞依賴。

這是一個預期的行爲?爲了使事情變得「有趣」:如果其中一個配置文件被默認激活(在common-pom中顯式,因爲激活不是從父模塊派生到子模塊),這些傳遞依賴關係總是添加到門戶。 但通過配置文件篩選或屬性設置按預期工作。

回答

3

comment這解決了它的一種方法:

上述情況不工作時激活配置文件使用屬性被用於

隨着屬性激活(而不是通過-P)它工作在Maven2和3

但是真正的解決方案是由發佈插件引起的: 該配置文件必須通過 提交到發佈插件

+0

高興你對評論的本質,爲紐帶似乎已經腐爛。 – 2017-02-07 19:45:50

1

不是一個解決辦法,但你的使用情況類似於this open Maven的錯誤。有趣的是,根據bug的細節,它也發生在早期的maven版本中。