假设我在pom.xml
文件中声明了以下属性。
<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/maven-v4_0_0.xsd">
// ....
<properties>
<dev.url>http://dev.mysite.com</dev.url>
<staging.url>http://staging.mysite.com</staging.url>
<prod.url>http://prod.mysite.com</prod.url>
</properties>
</project>
我想要做的是,使用不同的运行配置,并根据我设置的某个标志,读取相应的属性。例如,在构建生产时,要在运行时读取prod.url
属性,在构建暂存时,读取staging.url
属性。
答案 0 :(得分:1)
以下是我如何解决它:
我们的想法是将所有属性存储在单独的资源文件中。然后,使用maven resource plugin将相应的属性文件复制到values/environment.xml
在项目根目录中创建以下目录结构:
environment/dev/environment.xml
environment/prod/environment.xml
然后使用适当的值填充资源文件的内容。
<强> /dev/environment.xml:强>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="url">http://dev.mysite.com</string>
</resources>
<强> /prod/environment.xml 强>:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="url">http://prod.mysite.com</string>
</resources>
通过指定应执行此操作的阶段,要复制的资源以及输出目录,将maven资源插件添加到pom.xml
:
//...
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>copy-string-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>environment/${environment}/</directory>
<includes>
<include>environment.xml</include>
<filtering>true</filtering>
</includes>
</resource>
</resources>
<overwrite>true</overwrite>
<outputDirectory>${basedir}/res/values/</outputDirectory>
</configuration>
</plugin>
</plugins>
从这一点起,您可以创建2个运行配置:
mvn validate -Denvironment=dev
mvn validate -Denvironment=prod
除了将evironment/${environment}/environment.xml
中的相应资源复制到values/environment.xml
根据运行配置,${environment}
将与dev
或prod
相同。
您可以在this页面找到更多信息。