2012-01-17 45 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版本中。