Maven-resource-plugin 过滤后构建无效的 xml

问题描述 投票:0回答:1

我的java项目中有很多资源文件。其中许多重复了一些值。我决定将所有值移至 application.properties 文件,并在项目构建期间使用 maven-resource-plugin 将它们传播到其他文件,如下所示:

<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-resource-plugin在过滤时转义.xml资源文件中的字符
  2. 如果 maven-resource-plugin 不是管理构建属性的正确位置,我应该使用什么工具?

执行

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-->

如有任何帮助,我们将不胜感激! 预先感谢您!

xml maven resources escaping filtering
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.