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

Dra*_*vic 24 java intellij-idea pom.xml maven

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

然后我使用${changeSet}property来设置build.number属性pom.xml:

<build.number>${changeSet}</build.number>
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

小智 26

是的,看起来很糟糕

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

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

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

一种可能的解决方法

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


Law*_*nce 7

恕我直言,没有一个 SkyWalkers 解决方案适合我。

但以下一个对我有用:

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

<!--suppress UnresolvedMavenProperty -->
Run Code Online (Sandbox Code Playgroud)

所以你最终会得到:

<!--suppress UnresolvedMavenProperty -->
<git.version>${git.commit.time}.${git.commit.id.abbrev}</git.version>
Run Code Online (Sandbox Code Playgroud)


Sky*_*ker 6

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

建议-1:

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

Build > Rebuild Project
Run Code Online (Sandbox Code Playgroud)

建议-2:

您可以清除ide的缓存

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

建议-3:

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

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

建议4:

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

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

建议-5:

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

建议-6:

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