我有一个多模块项目,像这样:
main-project/
module1/
module2/
sub-module1/
sub-module2/
sub-module3/
...
module3/
module4/
...
Run Code Online (Sandbox Code Playgroud)
我需要在Maven2中定义一组属性(取决于我想要释放项目的环境).我不会使用<properties>因为有很多属性...因此,我使用Properties Maven2插件.
属性文件位于main-project/目录中.如何在主pom.xml中设置正确的目录,以便为任何子项指定在哪里找到属性文件?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>???/env_${env}.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我只设置<file>env_${env}.properties</file>,那么当Maven2编译第一个模块时,它将找不到该main-project/env_dev.properties文件.如果我设置<file>../env_${env}.properties</file>,那么将在父级别或任何子模块级别引发错误...
我有几个由maven构建的项目,我想在它们之间共享一些常见的属性 - spring版本,mysql驱动程序版本,svn base url等等 - 所以我可以更新它们一次,它将反映在所有项目中.
我想过有一个带有所有属性的超级pom,但如果我改变其中一个问题,我需要增加它的版本(并更新所有poms继承它)或从所有开发人员的机器中删除它我不想这样做.
可以在pom外部指定这些参数吗?我仍然希望在父pom中具有外部位置定义.
我有一个多模块Maven2项目,它构建一个Web应用程序.应用程序连接到后端服务器和数据库.在我们的环境中部署了多个服务器实例,并且还有多个后端和数据库实例用于开发,UAT,生产等.因此,实际上,每个应用程序配置都需要以下3个坐标:
我正致力于统一和自动化应用程序配置.将这些不同的配置表示为Maven中的配置文件是很容易和明显的.然后,我可以通过激活每个组中的一个配置文件来创建特定配置,例如
mvn -Pserver.Server1,backend.prod,db.uat clean install
Run Code Online (Sandbox Code Playgroud)
键入和容易出错有点繁琐 - 如果特定服务器配置错误连接到错误的数据库,价格可能会很高.解决此问题的一种显而易见的方法是将所有有用的配置文件组合放入脚本文件中.
但我认为通过直接从服务器配置文件激活必要的后端和数据库配置文件,我可以比这更聪明.服务器配置文件位于主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>
Run Code Online (Sandbox Code Playgroud)
并且后端和DB配置文件位于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>
Run Code Online (Sandbox Code Playgroud)
因此在理论上,由于server.myserver配置文件将db属性设置为dev02,这应该触发db.dev02子pom 中的配置文件的激活.但是,这不会发生.(如果两个轮廓在同一个pom中,也不是btw).如果我从命令行设置属性
mvn -Ddb=dev02 help:active-profiles
Run Code Online (Sandbox Code Playgroud)
然后,配置文件被激活,显然我没有拼错任何东西.
我忽略了什么吗?有没有其他方法可以使这项工作?
我看到存在类似的问题:我可以让一个maven配置文件激活另一个吗?
但是,恕我直言,这不是重复 - 我看到我的方法不起作用,我想了解原因.(我已阅读参考资料,但我可能忽略了一些明显的事情).