Maven资源插件在过滤后生成无效的xml



我在一个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文件中要转义的字符之一。

问题

  1. 如何配置maven资源插件以在过滤过程中转义.xml资源文件中的字符
  2. 如果maven资源插件不是管理构建属性的合适位置,我应该使用什么工具

执行mvn package后,MyXML.xml的内容为:

排除结果

<composite-id name="id" class="UserID">
<key-property name="email">
<column name="email" check="email ~ $$^[a-zA-Z0-9.!#$%&amp;&apos;*+/=?^_`{|}~-]+@[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-->

感谢您的帮助!提前谢谢!

有一个使用自定义过滤器的解决方案。然而,我认为资源插件足够聪明,可以识别最流行的格式之一并应用转义。

最新更新