我使用maven构建一些java项目并将其编译为Jar
和这个jar一起,我有一些特定于环境的配置文件
是否可以让maven创建多个配置文件
给予额外的"环境文件"
配置文件内容:
server_url={SERVER_URL}
server_port={SERVER_PORT}
环境文件1(用于开发)
SERVER_URL=DEV_SERVER
SERVER_PORT=8080
环境文件2(适用于qa)
SERVER_URL=QA_SERVER
SERVER_PORT=8091
所以输出将是:
the_main.jar
config_dev.ini
config_qa.ini
更新
为了澄清,我有多个文件,我想只保留一个敌人的开发,例如:
我想要的是在每个文件中植入变量,如下所示:
答案 0 :(得分:2)
我认为您可以结合使用Maven资源过滤和Maven配置文件功能来完成此任务。
<强> Maven Profiles 强>
<强>的pom.xml 强>
<project>
...
<profiles>
<profile>
<id>DEV</id>
<properties>
<config.server>DEV_SERVER</config.server>
<config.port>8080</config.port>
</properties>
</profile>
<profile>
<id>QA</id>
<properties>
<config.server>QA_SERVER</config.server>
<config.port>8091</config.port>
</properties>
</profile>
</profiles>
..
</project>
使用个人资料运行Maven
-P<profile>
DEV
mvn ... -PDEV
QA
MVN ... -PQA
<强> Filtering with Maven Resources Plugin 强>
过滤激活
<project>
...
<name>My Resources Plugin Practice Project</name>
...
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
...
</build>
...
</project>
配置文件
server_url=${config.server}
server_port=${config.port}
我希望这会对你有所帮助。
答案 1 :(得分:0)
这可以通过使用maven-antrun-plugin
来实现。
首先,您应该声明要写入文件的环境变量
<properties>
...
<server.dev>DEV_SERVER</server.dev>
<port.dev>8080</port.dev>
<server.qa>QA_SERVER</server.qa>
<port.qa>8091</port.qa>
</properties>
假设您的文件src/main/resources/config.ini
包含所有其他内容,但这几个参数可以&#34;乘以&#34;该ant
copy
&amp; concat
&amp; maven-antrun-plugin
任务。
然后配置<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>create_file</id>
<phase>compile</phase>
<configuration>
<target>
<taskdef resource="net/sf/antcontrib/antlib.xml"
classpathref="maven.compile.classpath" />
<for list="qa,dev" param="ENV">
<sequential>
<copy file="src/main/resources/config.ini"
tofile="target/config_@{ENV}.ini"/>
<concat destfile="target/config_@{ENV}.ini"
append="true"><![CDATA[
SERVER=${server.@{ENV}}
PORT=${port.@{ENV}}]]>
</concat>
</sequential>
</for>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
以运行编写这些文件的脚本
{{1}}