Maven 设置和 POM 中的配置文件名称相同
Same profile names in Maven-setting and POM
这是我第一天使用 Maven 的构建配置文件。我在以下文件中有配置文件:
- pom.xml
- 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,并添加一个额外的 属性 来玩。
这是我第一天使用 Maven 的构建配置文件。我在以下文件中有配置文件:
- pom.xml
- 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,并添加一个额外的 属性 来玩。