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

时间:2016-05-25 17:45:12

标签: java maven intellij-idea pom.xml

我使用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'

enter image description here

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

我在设置中尝试了所有提供的 Alt + 输入选项和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

5 个答案:

答案 0 :(得分:24)

是的,那看起来很破碎

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

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

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

可能的解决方法

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

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

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

进一步的步骤

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

答案 1 :(得分:3)

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

建议-1:

您可以重建项目,然后检查

Build > Rebuild Project

建议-2:

您可以清除ide的缓存

  1. File -> invalidate caches
  2. 然后Restart application
  3. 建议-3:

    有时愚蠢的伎俩可能会解决问题。

    1. 右键单击代码编辑器
    2. 将鼠标悬停在Maven上并展开
    3. 点击Reimport
    4. 建议-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:

      对于IntelliJ Idea中的每个小变化,您还可以disable reading pom.xmlIntellij IDEA and Maven, disable reading pom.xml on every small change, even without a save

答案 2 :(得分:2)

尝试文件 - >设置 - &gt;编辑 - &gt;检查 - &gt;取消选中&#34; Maven模型检查&#34;并申请。

答案 3 :(得分:0)

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

相反,这是该错误的一种解决方法,因此错误的错误通知消失了,行家仍然接受该变量,每个人都很高兴:

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

IntelliJ现在将其接受为正确,并且maven还将解析并接受动态变量而不会出现问题。显然,它是未公开的Maven语法,由于某种原因,它已在IntelliJ IDE中作为正确且唯一的语法实现。

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

玩得开心:)

答案 4 :(得分:0)

从长远来看,SkyWalkers解决方案都不适合我。

但这是一个:

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

<!--suppress UnresolvedMavenProperty -->

所以您最终会得到:

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