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

时间:2015-12-10 06:26:39

标签: maven maven-3 maven-profiles

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

  1. 的pom.xml
  2. Maven-settings(%USER_HOME%/。m2 / settings.xml)
  3. 为了好奇,我在两个具有相同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设置中的密码不正确,我的部署应该失败。我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

以下是我使用的示例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帮助插件我们实际上知道这两个配置文件都是活动的,这是真的,因为作为Antrun的一部分,我们从设置的配置文件中获得了两个属性(hello并且{ {1}}来自pom的简介。) 因此,两个配置文件同时处于活动状态,它们的属性已合并(因为hello2共享相同的名称),设置中的属性优先于POM中的属性,然后是属性的附加属性。 POM也正确地进入了。

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