如何在IntelliJ IDEA中禁用pom.xmlvalidation

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

 org.codehaus.mojo buildnumber-maven-plugin 1.2   initialize  hgchangeset     

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

 ${changeSet} 

但是,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 

是的,那看起来很糟糕

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

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

  • IDEA-96358 :Maven:无法解析环境变量
  • IDEA-100272 :Maven:支持隐式属性

在JetBrains支持论坛上还有关于类似问题的post:

  • 对于@ VAR @属性值,我的Maven POM文件中的“无法解析符号”

一种可能的解决方法

IDEA-96358的评论以及支持帖中都列出了一种解决方法。 您可以在“设置/构建”,“执行”,“开发/构建工具”/“Maven / Runner /属性”中添加虚拟版本的动态属性,如此屏幕截图所示: 设置Maven Runner Properties的屏幕截图

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

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

进一步的步骤

由于看起来IDEA的内置function并不真正涵盖动态生成的属性,我认为解决它的唯一真正方法是说服JetBrains这样做,除非有某种方法在第三方插件中添加function(现在非常超越我的专业知识)。 我建议投票和评论我提到的JIRA跟踪系统中的一张票,或者如果你认为你的问题不同(可能是这样)就创建你自己的票。 此外,您可能希望联系JetBrains支持,特别是如果您有付费订阅。 虽然我怀疑他们有很多优先事项要做(我们都是这样),但我也怀疑更多的人要求某些事情会增加他们积压到积压的可能性。 请求很好的东西很少疼。

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

建议1:

您可以重建项目然后检查

 Build > Rebuild Project 

建议2:

您可以清除ide的缓存

  1. File -> invalidate caches
  2. 然后Restart application

建议-3:

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

  1. 右键单击代码编辑器
  2. 将鼠标hover在Maven上并展开
  3. 单击重新导入

建议4:

有一些方法可以解决这个问题,还可以讨论版本到版本的情况。 你可以通过

IntelliJ检查给出“无法解析符号”但仍编译代码

建议-5:

您可以尝试MichałWróbel的博客 : 尽管maven正确构建了源代码,但无法在IntelliJ中解析符号XYZ

建议-6:

您还可以在IntelliJ Idea的每个小变化中disable reading pom.xml : Intellij IDEA和Maven,禁用每次小变化时读取pom.xml,即使没有保存

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

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

相反,这是一个bug的解决方法,所以错误的错误通知消失,maven仍然接受变量,每个人都很高兴:

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

IntelliJ现在将接受它作为正确,maven也将解析并接受动态变量而没有问题。 它显然是一个未记录的maven语法,由于某种原因,它已被实现为IntelliJ IDE中正确且唯一的语法。

我希望这有助于每个人,尽管它没有回答实际提出的问题,但却消除了提出问题的理由。

玩的开心 :)