gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:42:32 25 4
gpt4 key购买 nike

这是我第一天使用 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属性(property)。然而,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 和来自 pom 配置文件的 hello2) .
    因此,两个配置文件同时处于事件状态,它们的属性合并(因为 hello 共享相同的名称),设置中的属性优先于 POM 中的属性,然后 POM 的附加属性得到也正确。

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

    关于maven - Maven 设置和 POM 中的配置文件名称相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195124/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com