maven传递命令参数在构建时覆盖属性

时间:2013-05-14 12:14:09

标签: java maven maven-3

在我们的应用程序中,我们有一个whitelabel系统。

application.properties中的

设置为theme=default

将此设置注入Spring托管bean,然后通过框架对应用程序进行操作,例如添加正确的css等

我希望能够做的是,在构建时(战争创建),指定主题,例如mvn clean install -theme:some-theme。然后,这会更新application.properties,并修改theme 如果您只运行mvn clean install,那么theme=defaultunmodified

这可能吗?

2 个答案:

答案 0 :(得分:7)

通过命令行设置属性的正确方法是使用-D

mvn -Dproperty=value clean package

覆盖先前在pom.xml中定义的任何属性。


所以,如果你有pom.xml

<properties>
    <theme>myDefaultTheme</theme>
</properties>

mvn -Dtheme=halloween clean package会在执行期间覆盖theme的值,效果就像你有:

<properties>
    <theme>halloween</theme>
</properties>

答案 1 :(得分:2)

我猜你要找的是maven build profiles和resource filtering。您可以为每个主题分配一个配置文件,并根据配置文件,您可以更改application.properties中参数的值

e.g。

<build>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>white</id>
        <properties>
            <theme>white</theme>
            <prop1>xyz</prop1>
            <!--and some other properties-->
        </properties>
    </profile>

    <profile>
        <id>default</id>
        <properties>
            <theme>default</theme>
            <prop1>abc</prop1>
            <!--and some other properties-->
        </properties>
    </profile>
</profiles>

你可以在src / main / resources中找到一个属性文件:

application.properties:

my.theme=${theme}
my.custom.property=${prop1}

这种方法可以灵活地根据配置文件进行自定义,因此可以说是批量自定义。