【问题标题】:Define different value per profile for same Maven property为相同的 Maven 属性为每个配置文件定义不同的值
【发布时间】:2013-06-03 12:15:34
【问题描述】:

我遇到了每个配置文件的 Maven 属性问题。我有两个配置文件,每个配置文件都具有相同的属性“prop.key”,但值不同。当我调用 mvn clean package -PA -PBmvn clean package -PB -PA 时,两者都使用相同的值“B-1.0-SNAPSHOT”。我正在使用 Maven 3.0.4。

在我的 POM 下方:

<?xml version="1.0" encoding="UTF-8"?>
<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.test.module</groupId>
    <artifactId>test-module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <prop.key>UNKNOWN</prop.key>
    </properties>

    <profiles>
        <profile>
            <id>A</id>
            <properties>
                <prop.key>A-${project.version}</prop.key>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.2</version>
                        <executions>
                            <execution>
                                <id>A</id>
                                <phase>package</phase>
                                <configuration>
                                    <tasks name="a" description="a-desc">
                                        <echo message="RUN A = ${prop.key}" level="info"/>
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>B</id>
            <properties>
                <prop.key>B-${project.version}</prop.key>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.2</version>
                        <executions>
                            <execution>
                                <id>B</id>
                                <phase>package</phase>
                                <configuration>
                                    <tasks name="b" description="b-desc">
                                        <echo message="RUN B = ${prop.key}" level="info"/>
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

我找到了'similar topic',但结果相反! 它是一个错误还是maven的一个功能?

【问题讨论】:

    标签: maven


    【解决方案1】:

    你可以写 mvn package -PA,B 简而言之。

    结果是一样的: [echo] RUN A = B-1.0-SNAPSHOT[echo] RUN B = B-1.0-SNAPSHOT

    这是 maven 的正确行为。

    一个属性每次运行只能有一个特定值。您可以使用配置文件中的版本覆盖“默认值”。但是,如果您在两个配置文件中重新定义它并同时激活这两个配置文件,则其中一个配置文件“获胜”。

    对于同一个属性,每个配置文件不可能有一个值。配置文件没有自己的变量范围。属性始终是全局的。

    【讨论】:

    • Marc von Renteln,请您发表评论。可以使用过滤和 *.properties 文件,但对我来说没有帮助。我找到了使用当前结果复制 dir 的解决方法。
    • @Marc,你如何决定哪个配置文件“获胜”?是向-P 传递参数的顺序还是别的什么?
    【解决方案2】:

    我认为您会得到这种行为,因为配置文件的最后一个参数被选中。 试试

    mvn clean package -PA,B
    

    Maven introduction to profiles

    可以使用 -P CLI 选项显式指定配置文件。

    此选项接受一个参数,该参数是一个逗号分隔的列表 要使用的配置文件 ID。指定此选项时,没有其他配置文件 比选项参数中指定的那些将被激活。

    【讨论】:

      【解决方案3】:

      当您运行mvn package -PA,B 时,maven 将同时读取配置文件 A 和 B,并且 pom.xml 文件中后面的属性将优先(B 在 pom.xml 中的 A 下面定义),结果为 @987654322将使用@。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 2020-12-10
        • 2015-02-26
        相关资源
        最近更新 更多