maven选择错误版本的依赖关系与正确的配置文件

时间:2013-11-18 08:31:14

标签: java maven dependency-management

使用maven进行清洁时,我遇到了一个奇怪的问题。我正在使用集成配置文件如下。 mvn clean install -Pintegration,mainmodule -U -DskipTests = true

这将构建具有配置文件集成的mainmodule。 mainmodule使用sco作为依赖。 SCO在repsository中使用3个配置文件,主要是开发,分发和集成。每个都有依赖项添加了工件ID ws,但每个都有不同的版本。当我使用配置文件集成运行maven时,理想情况下应该使用集成中提到的版本来获取工件。 但奇怪的是它拿起了开发版本。 我不确定它是怎么做到的。如何确保加载具有正确配置文件的版本?

我正在添加POM的片段,如下所示。

<groupId>a.b.c.d</groupId>
<artifactId>smc</artifactId>
<version>1.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
    <artifactId>dummy</artifactId>
    <groupId>a.b</groupId>
    <version>2-SNAPSHOT</version>
</parent>
<name>smc</name>
.
.
.
       <profile>
        <id>mainmodule</id>
        <modules>
            <module>../mainmodule</module>
        </modules>

    <parent>
    <groupId>a.b.c.d</groupId>
    <artifactId>smc</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <relativePath>../smc/pom.xml</relativePath>
</parent>
<artifactId>mainmodule</artifactId>
<packaging>war</packaging>
<name>mainmodule</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>sco</artifactId>
        <version>3.0.0-SNAPSHOT</version>
        <type>jar</type>
    </dependency>
    --------------------------------------------

<parent>
    <groupId>a.b.c.d</groupId>
    <artifactId>smc</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <relativePath>../smc/pom.xml</relativePath>
</parent>
<artifactId>sco</artifactId>
<version>3.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sco</name>

....

<profiles>
    <profile>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
        <id>development</id>
        <dependencies>
            <dependency>
                <groupId>a.b.spp</groupId>
                <artifactId>ws</artifactId>
                <version>2.1.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>distribution</id>
        <dependencies>
            <dependency>
                <groupId>a.b.spp</groupId>
                <artifactId>ws</artifactId>
                <version>2.1.0</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>integration</id>
        <dependencies>
            <dependency>
                <groupId>a.b.spp</groupId>
                <artifactId>ws</artifactId>
                <version>2.1.0</version>
            </dependency>
        </dependencies>
    </profile>
</profiles>


感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正尝试从根模块更改依赖关系的配置文件。

一个更好的解决方案是将配置文件移动到具有正确ws版本的dependencyManagement部分的smc模块,并将依赖项放在sco模块中没有版本的ws中。

将此添加到smc

<profiles>
    <profile>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
        <id>development</id>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>a.b.spp</groupId>
                    <artifactId>ws</artifactId>
                    <version>2.1.1-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </profile>
    <profile>
        <id>distribution</id>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>a.b.spp</groupId>
                    <artifactId>ws</artifactId>
                    <version>2.1.0</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </profile>
    ...
</profiles>

现在把依赖放在sco中。 (没有配置文件)

<dependencies>
    <dependency>
        <groupId>a.b.spp</groupId>
        <artifactId>ws</artifactId>
    </dependency>
</dependencies>

现在在smc上运行以下命令并查看正常工作的版本

mvn dependency:tree 
mvn dependency:tree -Pdistribution