递归定义maven属性

时间:2010-10-25 19:11:30

标签: maven-2

我们正试图重新考虑我们模块化的maven建筑。我们引入了一个属性DEPLOYMENT_ENV,可能是“prod”,“dev”,“staging”,或者不是。我们进入的心态是我们可以定义,比如说:

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>

有关参数化maven构建的任何想法,以便我们可以保留我们庞大的中心属性定义列表吗?

2 个答案:

答案 0 :(得分:1)

您可以使用相同的属性代替不同的属性名称,但可以在pom.xml或settings.xml中的不同配置文件中声明它们

答案 1 :(得分:1)

您能否对遇到的问题稍微具体一点?你有任何错误吗?

我已经在pom.xml插件antrun中使用了这个递归属性定义,并且效果很好:

<configuration>

正如您在此代码段中所看到的,我使用<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> ... 属性,其中${ftp-${appli}-${env}-username}${appli}${env}是来自命令行或{{的属性1}}。

无论如何,正如Eugene Kuleshov建议的那样,我会选择一组${ftp-xxx-yyy-username} 来定义一些属性,使用settings.xml标签或外部属性文件:

<profiles>