java - 如何在 Maven 过滤后验证 XML?

标签 java xml validation maven maven-3

假设我有一个简单的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<root property="${my.custom.maven.property}"/>

因为 my.custom.maven.property 是通过 Maven 插件获取的,我无法修改它的值,而且它是非转义的 UTF-8 字符串,所以它可能(而且确实如此)包含像 " 这样的特殊字符。这会在打包或编译阶段后导致错误(主要是在部署的服务器上......)。我想通过 XML 验证来防止这种情况。

这里的重点是我正在使用xml-maven-plugin:validate。这不会有帮助,因为我无法指定此验证应该在过滤后完成(好吧,这里过滤意味着注入(inject)那些 Maven 属性值)。插件配置看起来非常简单:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>xml-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>validate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <validationSets>
            <validationSet>
                <dir>xml_root</dir>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </validationSet>
        </validationSets>
    </configuration>
</plugin>

最佳答案

Maven 属性注入(inject)由具有绑定(bind) by default 的资源插件处理。到 process-resources 阶段,而 XML Maven 插件验证目标有 default绑定(bind)到 test 阶段,在构建期间可能为时已晚。

您可以将 XML 验证移至 Maven 生命周期的早期,并在将其绑定(bind)到 process-resources 阶段的属性注入(inject)之后立即应用它,如下所示:

<executions>
   <execution>
       <phase>process-resources</phase>
       <goals>
           <goal>validate</goal>
       </goals>
   </execution>
</executions>

请注意附加的 phase 元素。
因此,Maven 将注入(inject)并验证 XML,并且您的构建将更早失败(如果需要)。

有关阶段及其顺序的完整列表,请查看官方 Maven 文档 here .

请注意:如果您要使用它,某些 Eclipse (m2e) 版本可能不喜欢不同的阶段绑定(bind),只要命令行构建工作正常(始终信任命令行构建),您就可以忽略此错误。

关于java - 如何在 Maven 过滤后验证 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174334/

相关文章:

python - 纯 Python XSLT 库

android - 如何设置夜间模式可绘制对象按预期工作

xml - Perl:将编辑的字段保存到同一个 XML 文件中

JavaScript(学习)

java - 整数不能转换为 Long

java - 使用java通过远程服务器执行powershell命令

java - 为什么这段代码不能编译?

jquery - 提交前如何验证表单

regex - VIN 验证正则表达式

java.net.ProtocolException : Unexpected status line: &lt;! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"