在Maven中将一个属性分配给另一个属性

时间:2010-01-28 15:57:17

标签: java maven-2

My Maven项目有两个属性,用于过滤持久性配置文件:

<database-url>jdbc:mysql://localhost/${database-name}?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=UTF-8&amp;amp;rewriteBatchedStatements=true&amp;amp;useServerPrepStmts=false&amp;amp;useCursorFetch=true</database-url>
<test-database-url>jdbc:mysql://localhost/${test-database-name}?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=UTF-8&amp;amp;rewriteBatchedStatements=true&amp;amp;useServerPrepStmts=false&amp;amp;useCursorFetch=true</test-database-url>

属性需要双重XML编码,因为配置文件本身是XML文档,Maven在资源过滤期间解析XML实体。

我希望能够直接从我的IDE运行我的测试,所以我创建了一个配置文件并将一个属性设置为另一个。

<database-url>${test-database-url}</database-url>

问题是Maven在属性设置中解析实体,然后在配置文件的过滤期间再次解析,这意味着我的配置文件是无效的XML。

有没有办法在不解析XML实体的情况下将一个属性设置为另一个属性?

1 个答案:

答案 0 :(得分:2)

不是直接答案,但是......为什么不根据配置文件对同一属性使用不同的值。例如,(默认)开发配置文件将具有:

<database.url>jdbc:mysql://localhost:3306/app_dev</database.url>

测试资料会有:

<database.url>jdbc:mysql://localhost:3306/app_test</database.url>

如果这不是你想要的,那么为url设置一个database.url属性并为名称传递-Ddatabase-name=app_xxx之类的系统属性就可以了。

但我可能会遗漏一些东西。