为Maven构建的Web应用程序指定运行时配置参数

我是Maven的新手,我想知道是否有一种合理的方法在构建时为Web应用程序指定配置信息参数。

我的意思是以下内容。 使用Ant,我通常创建一个文件夹(例如config-params ),并在该文件夹中放置一些属性文件或任何其他必要文件,并为我的应用程序运行的环境设置正确的设置。

例如:

- test.jdbc.properties - cert.jdbc.properties - prod.jdbc.properties - test.log4j.properties - test.myapplication.properties - test.web.xml ... ad nauseum 

然后,在我的ant构建脚本中,我只是从project.properties文件中读取一个配置文件配置变量,该文件只是指示我想要使用的文件集( testcertprod )。

这样,在为已知环境构建应用程序时,我不必担心检查每个可能的框架配置参数。

所以有两个问题:

  1. 这可能是以非hackish方式使用Maven POM实现的吗? 是否有一篇Maven文档,书籍或参考资料来处理应用程序构建的这个阶段?

  2. 有没有更合理的方法将我的应用程序构建配置文件定位到特定的执行环境(测试,产品等)? 我想这个人可能会更开放辩论,但如果有更简单,更优雅的方式来解决这个问题,我全都听见了:P。

我感谢你提供的任何帮助。 干杯!

我建议将测试环境的配置放入src / test / resources中,这可以由Maven自动进行测试。 生产配置应位于src / main / resources中,这意味着生产配置将在打包和发布期间自动使用。 像cert这样的其他配置目标意味着您需要为不同的环境再次构建应用程序。

您是否通过为不同环境生成工件的CI环境构建? 是的,基于配置文件的解决方案不是一个好的选择,只需根据为每个环境单独构建应用程序的需要。 最好只构建一次具有代表不同环境的工件。 让我们从这样的事情开始:

 . |-- pom.xml `-- src |-- main | |-- java | |-- resources | |-- environment | | |-- test | | | `-- database.properties | | |-- qa | | | `-- database.properties | | `-- production | | `-- database.properties | `-- webapp 

对于每个环境,您都有一个包含不同配置部分的文件夹(在本例中为属性文件)。 您需要maven-assembly-plugin的配置文件(适用于每个环境),如下所示:

  test  war  false   true true     WEB-INF ${basedir}/src/main/environment/test/  **     

当然,maven-assembly-plugin的配置如下:

   org.apache.maven.plugins maven-assembly-plugin   test package  single    ${project.basedir}/src/main/assembly/test.xml     qa package  single    ${project.basedir}/src/main/assembly/qa.xml     production package  single    ${project.basedir}/src/main/assembly/production.xml      

结果是只有一个构建,为每个环境生成一个工件,如下所示:

  1. artifactId的版本,test.war

  2. artifactId的版本,qa.war

  3. artifactId的版本,production.war

阅读Maven构建配置文件 。

基本概念是在单个POM文件中创建多个构建配置,然后使用它们调用它们

 mvn -P   

您还可以通过定义规则让maven决定使用哪个配置文件。