【问题标题】:Maven 3 regression: Profile dependencies lost?Maven 3 回归:配置文件依赖丢失?
【发布时间】:2012-02-12 18:10:08
【问题描述】:

我观察到 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>

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 中显式,因为激活不是从父模块派生到子模块),这些传递依赖项总是添加到门户. 但是通过配置文件进行过滤或属性设置可以按预期工作。

【问题讨论】:

    标签: maven maven-2 maven-3


    【解决方案1】:

    comment 以一种方式解决它:

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

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

    但真正的解决方案是由发布插件“引起”的: 配置文件必须通过 -Darguments=-Pproduction

    【讨论】:

    • 很高兴您包含评论精华,因为链接似乎已经腐烂了。
    【解决方案2】:

    不是解决方案,但您的用例类似于 this open maven 错误。有趣的是,根据 bug 的详细信息,它也发生在早期的 maven 版本上。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多