Maven 3回归:配置文件依赖性丢失了吗?

时间:2012-01-17 23:21:34

标签: maven maven-2 maven-3

我观察到Maven 2和Maven 3之间的变化行为。这是一个错误还是一个功能?我在Maven 3.x Compatibility Notes

中找不到任何内容

我使用两个不同的配置文件为多模块项目中的不同环境添加依赖项。

父-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>

the common-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>

portal-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执行,我只获得WAR中的common.jar,而不是传递依赖。

这是一种理想的行为吗?

使事情变得“有趣”:如果其中一个配置文件默认激活(在common-pom中显式,因为激活不是从子模块的父项派生的),这些传递依赖项总是添加到门户。 但是通过配置文件进行过滤或属性设置可以按预期工作。

2 个答案:

答案 0 :(得分:4)

comment解决了这个问题:

  

使用属性激活配置文件时,上述情况确实有效

使用属性激活(而不是通过-P),它可以在Maven2和3中使用

但真正的解决方案是由发布插件“引起”: 必须将配置文件提交到release-plugin via -Darguments=-Pproduction

答案 1 :(得分:1)

不是解决方案,但您的用例看起来类似于this open maven bug。有趣的是,根据bug细节,它也发生在早期的maven版本上。