我有一个构建 Web 应用程序的多模块 Maven2 项目。该应用程序连接到后端服务器和数据库。我们的环境中部署了多个服务器实例,也有多个后端和数据库实例用于开发、UAT、生产等。所以实际上,每个应用程序配置都需要这3个坐标:
- 前端服务器
- 后端服务器
- D B
我正在努力统一和自动化应用程序配置。在 Maven 中将这些不同的配置表示为配置文件很容易且显而易见。然后我可以通过激活每个组中的一个配置文件来创建特定配置,例如
mvn -Pserver.Server1,backend.prod,db.uat clean install
这有点繁琐且容易出错 - 如果特定服务器配置错误以连接到错误的数据库,则价格可能会很高。解决此问题的一种明显方法是将所有有用的配置文件组合放入脚本文件中。
但我认为我可以比直接从服务器配置文件激活必要的后端和数据库配置文件更聪明。服务器配置文件位于主 pom 中,例如
<profile>
<id>server.myserver</id>
<properties>
<jboss.home>D:\Programs\jboss-4.2.1.GA</jboss.home>
<server.name>NightlyBuild</server.name>
<hosttobind>192.168.1.100</hosttobind>
<servlet.port>8080</servlet.port>
...
<db>dev02</db>
</properties>
</profile>
并且后端和数据库配置文件在 Config 子模块的 pom 中,例如
<profile>
<id>db.dev02</id>
<activation>
<property>
<name>db</name>
<value>dev02</value>
</property>
</activation>
<properties>
<jdbc.address>jdbc:oracle:thin:@192.168.0.101:1521:dbdev02</jdbc.address>
</properties>
</profile>
所以理论上,由于server.myserver
配置文件将db
属性设置为dev02
,这应该会触发db.dev02
子 pom.xml 中配置文件的激活。但是,这不会发生。(如果这两个配置文件在同一个 pom 中,顺便说一句)。如果我从命令行设置属性
mvn -Ddb=dev02 help:active-profiles
然后配置文件被激活,所以显然我没有拼错任何东西。
我忽略了什么吗?有没有其他方法可以使这项工作?
我看到存在一个类似的问题:我可以让一个 Maven 配置文件激活另一个吗?
但是,恕我直言,这不是重复的-我看到我的方法不起作用,我想了解原因。(我已经阅读了参考资料,但我可能忽略了一些明显的东西)。