我正在一个Maven项目中,需要根据环境更改属性文件值,但应在所有环境中部署相同的WAR文件 。在这里,我们有三个选择可以实现-
1。 Java参数参数-我知道这是最好的选择,但我们不能使用它。我们不想进行任何代码级别更改。这背后有很多原因。
2。 WAR文件提取-这是实现的一种方法。我们可以在部署过程中一次构建WAR,运行脚本以解包战争>替换属性文件值(特定于env)>然后打包战争。但是,我们不允许拆包。因此,该解决方案没有用。
3。 Maven分析-这是我认为是解决方案的最后一种方法。在Pom中,我定义了多个配置文件。因此,基于配置文件,我们正在类路径上复制属性文件。 但是这里的问题是-我们需要按环境构建WAR,这违反了要求-“ 构建一次并在任何地方部署”
我需要您的建议和方法来满足我的要求-为多个环境构建一次部署
我想尝试的想法很少,但不确定在技术上是否可行-
编译一次源代码,并且可以使用相同的编译代码来 捆绑战争。在战争捆绑中,我们可以使用 Maven分析以替换属性文件的值。可是我不知道 如何使用Maven和Pom.xml配置来实现。
我已附上我当前的Maven分析配置代码段。
<profile>
<id>dev</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-prod-resources</id>
<!-- <phase>process-classes</phase> -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${basedir}/src/main/resources</outputDirectory>
<encoding>UTF-8</encoding>
<resources>
<resource>
<directory>${basedir}/src/main/profiles/DEV</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>