Maven-version-plugin,ruleset,rule& ignoreVersions标签

时间:2017-05-23 13:14:18

标签: xml maven intellij-idea uri

我正在尝试使用maven-version-plugin来自动更新所有依赖项。不过,我不想要alpha或beta版本。 因此,我创建了一个"规则文件"排除这些版本。这是:

<ruleset comparisonMethod="maven"
     xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">

    <rule groupId="commons-logging" artifactId="commons-logging">

        <ignoreVersions>
            <ignoreVersion type="regex">.*[-_\.](alpha|Alpha|ALPHA|b|beta|Beta|BETA|rc|‌​RC|M|EA)[-_\.]?[0-9]*</ignoreVersion>
        </ignoreVersions>

    </rule>

</ruleset>

(此正则表达式来自this thread。)

问题是Intellij IDEA使xmlns URI和第二个xsi:schemaLocation URI变红,说&#34; URI未注册&#34;对于第一个&#34; 无法解析符号&#39; http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd&#39; &#34;对于第二个。 The documentation使用相同的值,因此我认为它们是商品。

如何注册此URI然后修补​​无法解析的符号?

谢谢!

1 个答案:

答案 0 :(得分:2)

我发现实际架构不在http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd但在此处:http://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd

文档(http://www.mojohaus.org/versions-maven-plugin/version-rules.html)实际上提供了一个错误的示例文件,但确实声明了以下内容

  

规则集文件必须与XSD schema匹配。

这意味着xsi:schemaLocation应更改为

xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd"

完全,这就变成了这个:

<ruleset 
  comparisonMethod="maven"
  xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">

  <rule groupId="commons-logging" artifactId="commons-logging">
    <ignoreVersions>
      <ignoreVersion type="regex">.*[-_\.](alpha|Alpha|ALPHA|b|beta|Beta|BETA|rc|‌​RC|M|EA)[-_\.]?[0-9]*</ignoreVersion>
    </ignoreVersions>
  </rule>
</ruleset>

更改xsi:schemaLocation后,您可以使用<Alt>+<Enter>并选择“获取外部资源”来解析架构并导入正确的命名空间。

可替换地:

您还可以告诉IntelliJ IDEA 认为架构所在的位置。例如,您可以将文件下载到磁盘;按<Alt>+<Enter>,选择“手动设置外部资源”并指向刚刚下载的文件。 IntelliJ IDEA 现在忽略xsi:schemaLocation提示并使用您刚刚配置的覆盖。

使用指向远程文件的xsi:schemaLocation的缺点是xml处理器每次都必须即时下载(这会影响性能,特别是如果架构本身也指向外部架构)。其次,由于 s ,因此您必须相信该文件未在传输中进行修改。通过预先下载,您可以检查文件,将其放在受信任的位置并使用已知的版本。