gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:45:52 24 4
gpt4 key购买 nike

假设我有一个简单的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com