Java 在Maven中将一个属性分配给另一个属性
My Maven项目有两个属性,用于筛选持久性配置文件:Java 在Maven中将一个属性分配给另一个属性,java,maven-2,Java,Maven 2,My Maven项目有两个属性,用于筛选持久性配置文件: <database-url>jdbc:mysql://localhost/${database-name}?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;useServerPrepStmts=false
<database-url>jdbc:mysql://localhost/${database-name}?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;useServerPrepStmts=false&amp;useCursorFetch=true</database-url>
<test-database-url>jdbc:mysql://localhost/${test-database-name}?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;useServerPrepStmts=false&amp;useCursorFetch=true</test-database-url>
jdbc:mysql://localhost/${database name}?autoReconnect=true&;amp;useUnicode=true&;amp;characterEncoding=UTF-8&;amp;rewriteBatchedStatements=true&;amp;UseServerPrepsmts=false&;amp;useCursorFetch=true
jdbc:mysql://localhost/${test database name}?autoReconnect=true&;amp;useUnicode=true&;amp;characterEncoding=UTF-8&;amp;rewriteBatchedStatements=true&;amp;UseServerPrepsmts=false&;amp;useCursorFetch=true
属性需要双重XML编码,因为配置文件本身是XML文档,并且Maven在资源筛选期间解析XML实体
我希望能够直接从IDE运行测试,所以我创建了一个概要文件,并将一个属性设置为另一个属性
<database-url>${test-database-url}</database-url>
${test database url}
问题是Maven解析属性设置中的实体,然后在过滤配置文件期间解析,这意味着我的配置文件是无效的XML
有没有一种方法可以在不解析XML实体的情况下将一个属性设置为另一个属性?不是直接的答案,而是。。。为什么不根据配置文件对同一属性使用不同的值呢。例如,(默认)开发配置文件将具有:
<database.url>jdbc:mysql://localhost:3306/app_dev</database.url>
<database.url>jdbc:mysql://localhost:3306/app_test</database.url>
jdbc:mysql://localhost:3306/app_dev
测试配置文件应包括:
<database.url>jdbc:mysql://localhost:3306/app_dev</database.url>
<database.url>jdbc:mysql://localhost:3306/app_test</database.url>
jdbc:mysql://localhost:3306/app_test
如果这不是您想要的,那么可能为url使用一个数据库.url
属性,并为名称传递一个系统属性,如-Ddatabase name=app_xxx
,就可以了
但是我可能遗漏了一些东西。我们的应用程序支持许多数据库,因此配置文件已经被用来分配数据库名称、数据库url和测试数据库url属性。我试图避免在“测试”模式下复制所有数据库配置文件。而且,数据库名称(不幸的是!)依赖于所使用的数据库,因此在命令行上设置它需要POM中编码的映射知识。