如何在 IntelliJ IDEA 中禁用 pom.xml 验证

Posted

技术标签:

【中文标题】如何在 IntelliJ IDEA 中禁用 pom.xml 验证【英文标题】:How to disable pom.xml validation in IntelliJ IDEA 【发布时间】:2016-09-23 11:30:46 【问题描述】:

我正在使用 buildnumber-maven-plugin 获取 Mercurial 变更集作为项目内部版本号:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>hgchangeset</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然后我使用$changeSet属性将build.number属性设置在同一个pom.xml中:

<build.number>$changeSet</build.number>

但是,IntelliJ IDEA 抱怨它Cannot resolve symbol 'changeSet'

此外,模块根目录和受影响的pom.xml 文件在项目工具窗口中以红色下划线显示。

我在设置中尝试了所有提供的 Alt+Enter 选项和 Maven 配置;没有任何帮助。

一切正常,我只是想摆脱 IDE 中显示的烦人错误。有什么建议吗?

IDE 和环境:

IntelliJ IDEA 2016.1.2
Build #IC-145.972, built on May 14, 2016
JRE: 1.8.0_65-b17 amd64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation

【问题讨论】:

试试这个***.com/a/26099823/1371064 使用git-commit-id-plugin同样的问题 【参考方案1】:

恕我直言,SkyWalkers 的任何解决方案都不适合我。

但以下一个对我有用:

只需将其添加到属性线上方:

<!--suppress UnresolvedMavenProperty -->

所以你最终会得到:

<!--suppress UnresolvedMavenProperty -->
<git.version>$git.commit.time.$git.commit.id.abbrev</git.version>

【讨论】:

【参考方案2】:

问题询问如何停用验证,因为未修复的 IntelliJ 错误导致动态 pom.xml 变量中的语法“$dynamic.variable”出现错误错误。

相反,这里有一个解决该错误的方法,因此错误的错误通知消失了,maven 仍然接受该变量并且每个人都很高兴:

按此顺序更改变量语法(不是开玩笑): 1.“$dynamic.variable” 2.“dynamic.variable” 3.“$dynamic.variable”

IntelliJ 现在会接受它是正确的,并且 maven 也会毫无问题地解析和接受动态变量。这显然是一种未记录的 maven 语法,由于某种原因,它已在 IntelliJ IDE 中实现为正确且唯一的语法。

我希望这对每个人都有帮助,尽管它没有回答实际提出的问题,但消除了询问它的原因。

玩得开心:)

【讨论】:

【参考方案3】:

尝试文件->设置->编辑器->检查->取消选中“Maven模型检查”并应用。

【讨论】:

关闭 Maven 检查对大多数人都有效,但似乎不会影响“无法解析符号”之一。如果它适用于您,您能否说明它适用于哪个版本的 IDEA,以及您可能更改的任何其他相关设置或检查? 2017.2 的良好解决方法。我的 pom.xml 现在在右上角勾选了绿色,没有红色突出显示。不过,如果 Jetbrains 解决了这个问题,那仍然会很好。 说得太早了。解决方法适用于我在插件配置中使用这些动态属性的情况,但它不适用于我使用 project.properties 部分中的变量的超级 pom。【参考方案4】:

是的,看起来坏了

有趣。我已经在 IntelliJ IDEA Ultimate 14.1.7 和 IntelliJ IDEA Community 2016.1.2 中测试了这种行为,即使关闭了所有 Maven 检查,IDEA 不知道的属性仍然显示为红色。这看起来是 IDEA 中的一个错误(或者更仁慈地说,一个未实现的功能),它在无法识别属性时给出的错误不受检查设置的控制。

IDEA 的错误跟踪器中有几个相关问题:

IDEA-96358: Maven: cannot resolve environment variables IDEA-100272: Maven: support for implicit properties

JetBrains 支持论坛上也有类似问题的帖子:

'Cannot resolve symbol' in my Maven POM file for @VAR@ property values

一种可能的解决方法

IDEA-96358 的 cmets 和支持帖子中都列出了一种解决方法。您可以在 Settings / Build, Execution, Development / Build Tools / Maven / Runner / Properties 中添加动态属性的虚拟版本,如下图所示:

将值放在那里让 IDEA 知道它们,因此它不会以红色突出显示它们。但是,我在测试中发现,由于 IDEA 将值作为属性传递给 Maven,它们并没有被 buildnumber-plugin 覆盖,而是在我尝试使用它时看到了我的虚拟值。 (我使用它测试的唯一方法是在 maven-help-plugin 评估目标中,但也许它在以其他方式使用它时有效?)为了能够使用动态设置的值,在我的特定构建配置中我取消选中“使用项目设置”框并删除虚拟属性,如下图所示:

这开始是一个相当烦人的解决方法,就好像你有很多 Maven 构建配置并且喜欢它们都默认为相同的运行器设置的能力,你现在必须复制“真实”设置您想要在每个配置中,并且在项目设置对话框中设置默认值只是用于“虚拟”值,以便 IDEA 知道它不应该将引用该属性视为错误。这还要求您通过构建配置运行所有 Maven 命令,而不是通过其他方式,例如在“Maven 项目”工具窗口中双击生命周期。虽然如果您的构建配置很少,这是您在 IDEA 中运行 Maven 的唯一方式,而且编辑 pom.xml 文件时的红色已经让您非常恼火,也许这种解决方法对您来说是一个可以接受的折衷方案。

进一步的步骤

由于 IDEA 的内置功能似乎并没有真正涵盖动态生成的属性,我认为修复它的唯一真正方法是说服 JetBrains 这样做,除非有某种方法可以在第三个中添加该功能-party 插件(现在远远超出了我的专业知识)。我建议对我提到的 JIRA 跟踪系统中的一张票进行投票和评论,或者如果您认为您的问题足够不同(可能是),请创建自己的票。此外,您可能需要联系 JetBrains 支持,特别是如果您有付费订阅。虽然我怀疑他们有许多优先事项需要处理(就像我们所有人一样),但我也怀疑更多人要求某事会增加它移向他们积压工作的顶部的机会。善意地要求一些东西很少会受到伤害。

【讨论】:

支持这些 IntelliJ 问题听起来是最好的长期解决方案。 :) 解决方法有效,谢谢。我可以接受在本地环境中使用的虚拟值,因为无论如何构建其他环境都是使用 IDE 之外的 CI 工具完成的。 仅供参考:IDEA-96358 应该被修复【参考方案5】:

因为它工作正常。我认为这将是一些缓存,或者可能是对提供一些信息没有重大影响的小错误。所以我想建议你一些选择

建议一:

你可以重新构建你的项目,然后检查

Build > Rebuild Project

建议二:

您可以清除 ide 的缓存

    File -&gt; invalidate caches 然后Restart application

建议 3:

有时愚蠢的技巧可能会解决问题。

    右击代码编辑器 将鼠标悬停在 Maven 上并展开 点击重新导入

建议 4:

有一些方法可以解决问题,也可以讨论版本之间发生的情况。你可以通过

IntelliJ inspection gives "Cannot resolve symbol" but still compiles code

建议 5:

你可以试试Michał Wróbel 的博客:Cannot resolve symbol XYZ in IntelliJ although maven builds sources properly

建议 6:

您也可以disable reading pom.xml 了解 IntelliJ Idea 中的每一个小变化: Intellij IDEA and Maven, disable reading pom.xml on every small change, even without a save

【讨论】:

以上是关于如何在 IntelliJ IDEA 中禁用 pom.xml 验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IntelliJ IDEA 2017.1 中禁用鼠标中键粘贴?

在 IntelliJ IDEA 上禁用拼写检查

IntelliJ IDEA 在项目中禁用编辑/格式化 .svg 图像

如果 pom.xml 不在根级别,我如何将 maven 项目添加到 intellij idea 中

如何在IntelliJ IDEA中禁用“粘贴时将Java转换为Kotlin”?

如何在鼠标悬停时禁用 JetBrains IDE(IntelliJ IDEA、PyCharm、WebStorm)中的自动显示提示