具有默认值但可由外部属性文件自定义的Maven属性

具有默认值但可由外部属性文件自定义的Maven属性,maven,Maven,我想要一个属性a和b,分别具有默认值org.a和org.b 我想用属性文件覆盖一个或两个。我将使用properties maven插件 我的pom是 <properties> <a>org.a</a> <b>org.b</b> </properties> <profiles> <profile> <id>load</id>

我想要一个属性
a
b
,分别具有默认值
org.a
org.b

我想用属性文件覆盖一个或两个。我将使用
properties maven插件

我的pom是

<properties>
    <a>org.a</a>
    <b>org.b</b>
</properties>
<profiles>
    <profile>
        <id>load</id>
        <properties>
                <a>${x.a}</a>
                <b>${x.b}</b>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>properties-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <executions>
                        <execution>
                            <phase>validate</phase>
                            <goals><goal>read-project-properties</goal></goals>
                            <configuration><files><file>x</file></files></configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <configuration>
                        <target><echo>hello, ${a} ${b} </echo></target>
                    </configuration>
                    <goals><goal>run</goal></goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
mvn初始化的输出为

你好,org.a org.b

没关系

mvn初始化-Pload的输出为

实际:

[回声]你好${x.a}mod.b

期望

[回声]你好,org.a mod.b


如何实现我的期望?我想要避免像
mvn initialize-Pload-Da=org.a
mvn initialize-Db=mod.b
这样的命令,因为我想要从属性文件中读取自定义项。我不想从pom.xml中删除
${x.a}
,因为我有时想修改
a

此设置的目的是什么?您希望实现什么?@khmarbaise,我的应用程序有很好的默认值,我想保留这些默认值。接下来,我有几份詹金斯的工作。一个可以创建自定义应用程序服务器,另一个可以创建自定义数据库,其他两个都可以。我希望每个作业都以相同的方式调用构建,比如说
mvn install-Pload
,但是属性文件会因作业而异。当maven build可以通过属性文件而不是命令行参数进行配置时,我希望能够很容易地维护Jenkins。为什么对不同的配置执行不同的作业?为什么不在一个作业中生成所有工件?@khmarbaise我的最后一个工件是数据库和应用程序服务器的配置战争。配置是在战争中建立的。我想让每个作业使用不同的默认配置生成一个稍微不同的WAR。在具体的环境背景下处理单个自给自足的战争更容易,战争+配置当然可以。但我会在一个作业中生成所有三个,这意味着
mvn clean package
将生成三个不同的工件(war),并具有适当的配置。请看这里:
x.b=mod.b