Maven 设置和 POM 中的配置文件名称相同

Same profile names in Maven-setting and POM

这是我第一天使用 Maven 的构建配置文件。我在以下文件中有配置文件:

  1. pom.xml
  2. Maven 设置 (%USER_HOME%/.m2/settings.xml)

出于好奇,我在两个文件中创建了一个具有相同 ID(local_deploy) 的配置文件,唯一不同的是在一个文件中 属性(例如 tomcat.pwd)。

POM 中的配置文件如下所示:

<profile>
        <id>local_deploy</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <tomcat.host>localhost</tomcat.host>
            <tomcat.port>8080</tomcat.port>
            <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url>
            <tomcat.user>admin</tomcat.user>
            <tomcat.pwd>admin</tomcat.pwd>
        </properties>
    </profile>

Maven 设置中的配置文件如下所示:

<profile>
    <id>local_deploy</id>
    <properties>
      <tomcat.host>localhost</tomcat.host>
      <tomcat.port>8080</tomcat.port>
      <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url>
      <tomcat.user>admin</tomcat.user>
      <tomcat.pwd>wrongpwd</tomcat.pwd>
    </properties>
  </profile>

请注意,Maven 设置中的配置文件未在 <activeProfiles> 中列出。

当我尝试使用以下命令安装我的应用程序时

mvn clean install -P local_deploy help:active-profiles

我的应用程序已部署并在控制台上输出以下内容:

The following profiles are active:
local_deploy (source: external)
local_deploy (source: <my groupId>:<my artifactId><version>)

我正在查看 this 文档,它说

Take note that profiles in the settings.xml takes higher priority than profiles in the POM

因此,我认为我的部署应该因 Maven 设置中的密码不正确而失败。我在这里错过了什么?

这是我使用的示例 pom:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample</groupId>
    <artifactId>profiles-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>print-hello</id>
                        <phase>test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <property name="msg" value="${hello}" />
                                <property name="msg2" value="${hello2}" />
                                <echo message="hello from build: ${msg}, ${msg2}" />
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>p2</id>
            <properties>
                <hello>from-pom</hello>
                <hello2>from-pom-again</hello2>
            </properties>
        </profile>
    </profiles>
</project>

在我的设置中定义:

<profile>
    <id>p2</id>
    <properties>
        <hello>from-settings</hello>
    </properties>
</profile>

因此,请注意:两个具有相同名称的配置文件,在 POM 和设置上,定义相同 hello 属性。但是,POM 中的那个定义了另外一个 属性、hello2.

然后,运行:

mvn test -Pp2 help:active-profiles

我得到了构建输出的一部分:

[INFO] --- maven-antrun-plugin:1.5:run (print-hello) @ profiles-sample ---
[INFO] Executing tasks

main:
     [echo] hello from build: from-settings, from-pom-again
[INFO] Executed tasks
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building profiles-sample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.2:active-profiles (default-cli) @ profiles-sample ---
[INFO] 
Active Profiles for Project 'com.sample:profiles-sample:jar:0.0.1-SNAPSHOT': 

The following profiles are active:

 - p2 (source: external)
 - p2 (source: com.sample:profiles-sample:0.0.1-SNAPSHOT)

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

因此,从 Maven Help Plugin 我们实际上知道两个配置文件都是活动的,这是真的,因为作为 Antrun 的一部分,我们获得了两个属性(hello 来自设置的配置文件和 hello2 来自 pom 的配置文件)。
因此,这两个配置文件同时处于活动状态,它们的属性被合并(因为 hello 共享相同的名称),设置中的 属性 优先于设置中的 属性 POM,然后 POM 的附加 属性 也正确输入。

所以,我无法重现您提到的场景。我建议仔细检查设置和 pom,并添加一个额外的 属性 来玩。