我在一个java项目中有很多资源文件。其中许多值重复。我决定将所有值移动到application.properties文件中,并在项目构建期间使用maven资源插件将它们传播到其他文件,如下所示:
<build>
<filters>
<filter>
${project.basedir}/src/main/resources/application.properties
</filter>
</filters>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>
application.properties文件的内容如下:
email.regexp=^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
# other properties
例如,假设我在MyXML.xml文件中使用email.regexp
属性,如下所示:
<composite-id name="id" class="UserID">
<key-property name="email">
<column name="email" check="email ~ $$${email.regexp}$$"/>
</key-property>
</composite-id>
<!--other content-->
正如您所注意到的,email.regexp
包含一个与字符。它是.xml文件中要转义的字符之一。
问题
- 如何配置maven资源插件以在过滤过程中转义.xml资源文件中的字符
- 如果maven资源插件不是管理构建属性的合适位置,我应该使用什么工具
执行mvn package
后,MyXML.xml的内容为:
排除结果
<composite-id name="id" class="UserID">
<key-property name="email">
<column name="email" check="email ~ $$^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$$$"/>
</key-property>
</composite-id>
<!--other content-->
实际结果
<composite-id name="id" class="UserID">
<key-property name="email">
<column name="email" check="email ~ $$^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$$$"/>
</key-property>
</composite-id>
<!--other content-->
感谢您的帮助!提前谢谢!
有一个使用自定义过滤器的解决方案。然而,我认为资源插件足够聪明,可以识别最流行的格式之一并应用转义。