我有一个多模块Maven2项目,它建立一个Web应用程序。该应用程序连接到后端服务器和数据库。有部署在我们的环境中的几个服务器实例,并且也有发展的多个后端和数据库实例,UAT,生产等,所以实际上,每一个应用程序的配置需要这3个坐标:为什么我无法从其他配置文件激活Maven2配置文件?
- 前端服务器
- 后端服务器
- DB
我工作的统一和自动化应用程序配置。将这些不同的配置表示为Maven中的配置文件是很容易和明显的。然后,我可以通过激活每个组中的一个配置文件来创建特定配置,例如,
mvn -Pserver.Server1,backend.prod,db.uat clean install
这是一个有点乏味键入且容易出错 - 如果特定服务器,配置到连接到错误的DB,价格也高。解决此问题的一个显而易见的方法是将所有有用的配置文件组合放入脚本文件中。
但我认为我可以直接从服务器配置文件启动所需的后台和数据库配置文件比这更聪明。服务器配置文件位于主要的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>
和后端和DB配置文件是在配置子模块,例如的聚甲醛
<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
,这将引发孩子POM的db.dev02
轮廓的激活。但是,这不会发生。 (如果这两个配置文件是在同一个pom中,btw)。如果我有
mvn -Ddb=dev02 help:active-profiles
设置属性在命令行,则轮廓虽然激活,所以显然我没有拼错什么。
我忽略了什么吗?有没有其他的方式来完成这项工作?
我看到了存在类似的问题:Can I make one maven profile activate another?
但是,恕我直言,这不是一个重复的 - 我看到,我的做法是不工作,我想知道为什么。 (我已经阅读了参考文献,但我可能忽略了一些明显的内容)。
@布雷特,谢谢,这清除了事情。最后一件事情是:你写道:“你使用的解决方案具有相同的属性来激活你想要一起做的事情,这是最好的解决方案。”凭什么?审美也许,但它仍然行不通... – 2010-02-12 09:22:07
我的意思是“从命令行”。所以如果你需要'profile1'来暗示'profile2'被激活,请确保它们都是用'propertyX'激活的,然后使用'mvn -DpropertyX'而不是'mvn -Pprofile1'。它不像你想要的那么灵活。 – 2010-02-12 11:52:04