Maven 2 递归定义maven属性
我们正试图重新考虑我们模块化的maven建筑。我们引入了一个属性部署_ENV,它可能是“prod”、“dev”、“staging”等等。我们当时的心态是,我们可以定义,比如:Maven 2 递归定义maven属性,maven-2,Maven 2,我们正试图重新考虑我们模块化的maven建筑。我们引入了一个属性部署_ENV,它可能是“prod”、“dev”、“staging”等等。我们当时的心态是,我们可以定义,比如: dev.jdbc.username = yoyodyne dev.jdbc.password = 0verthruster staging.jdb.username = cavaliers staging.jdbc.password = 8thdim 这似乎是在为maven插件的配置提供信息。例如,DBUnit需要一个用
dev.jdbc.username = yoyodyne
dev.jdbc.password = 0verthruster
staging.jdb.username = cavaliers
staging.jdbc.password = 8thdim
这似乎是在为maven插件的配置提供信息。例如,DBUnit需要一个用户名。从语义上讲,我们想到的解决方案如下所示,但是maven不允许以这种方式进行递归属性定义:
<configuration>
<username>${${DEPLOYMENT_ENV}.jdbc.username}</username>
</configuration>
${${DEPLOYMENT\u ENV}.jdbc.username}
有没有关于参数化maven构建的想法,比如我们可以保留庞大的属性定义中心列表?您可以简单地使用相同的属性,而不是使用不同的属性名称,但在不同的配置文件中声明它们,无论是在pom.xml中还是在settings.xml中。您能更具体地描述一下您遇到的问题吗?你有什么错误吗 我已经在我的
pom.xml
中的一个antrun
插件
中使用了这个递归属性定义,它工作得很好:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
...
<ftp server="${my-ftp-url}" userid="${ftp-${appli}-${env}-username}" password="${ftp-${appli}-${env}-password}"
remotedir="${remoteDir}/sources" passive="yes">
<fileset dir="../target/">
<include name="*.tar.gz"/>
</fileset>
</ftp>
...
我们以前就这样做过。我们基于概要文件的方法已经失控,不同的概要文件定义了非常不同的插件。我们完全同意,我们可以独立地解决意大利面构建配置文件的问题,使用不同的配置文件声明不同的变量。我们正试图尽可能地取消与配置文件无关的配置,但这可能是一个很好甚至是必要的地方。我建议只使用属性创建多个配置文件。请注意,您可以同时激活多个配置文件,例如属性+附加插件/gials,或者仅激活带有默认插件的属性。我很确定我已经做过这样的事情,但它位于Antrun插件的
节点中。。。此
位于哪个插件中?你有什么行为?
<build>
<plugins>
<!-- Properties loader -->
<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>${basedir}/${env-properties-file}</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
<profiles>
<!-- Development -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
<property>
<name>env</name>
<value>dev</value>
</property>
</activation>
<properties>
<env-properties-file>dev-environment.properties</env-properties-file>
</properties>
</profile>
<!-- Homologation -->
<profile>
<id>hom</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>env</name>
<value>hom</value>
</property>
</activation>
<properties>
<env-properties-file>homologation-environment.properties</env-properties-file>
</properties>
</profile>
...