我们正试图重新考虑我们模块化的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构建的任何想法,以便我们可以保留我们庞大的中心属性定义列表吗?
答案 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>