我正在尝试使用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然后修补无法解析的符号?
谢谢!
答案 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 ,因此您必须相信该文件未在传输中进行修改。通过预先下载,您可以检查文件,将其放在受信任的位置并使用已知的版本。