maven使用正确的配置文件选择了错误版本的依赖项



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

这将构建具有配置文件集成的主模块。主模块使用sco作为其依赖项。上海合作组织在表述中主要采用了发展、分布和一体化三种模式。每个都添加了带有工件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>


谢谢你的帮助。

您正试图从根模块更改依赖项的配置文件。

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

将此添加到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

最新更新