Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Maven中将一个属性分配给另一个属性_Java_Maven 2 - Fatal编程技术网

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

Java 在Maven中将一个属性分配给另一个属性,java,maven-2,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

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>
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中编码的映射知识。