繁体   English   中英

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

[英]How to disable pom.xml validation in IntelliJ IDEA

我正在使用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 ${changeSet}属性在同一个pom.xml设置build.number属性:

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

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

在此处输入图片说明

此外,模块根和受影响的pom.xml文件在项目工具窗口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 中的一个错误(或者更友善地说,一个未实现的功能),它在无法识别属性时给出的错误不受检查设置的控制。

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

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

一个可能的解决方法

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

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

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

进一步的步骤

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

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

但以下一个对我有用:

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

<!--suppress UnresolvedMavenProperty -->

所以你最终会得到:

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

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

建议-1:

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

Build > Rebuild Project

建议-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,即使没有折扣

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

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

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

按以下顺序更改变量语法(不是开玩笑): 1. "${dynamic.variable}" 2. "{dynamic.variable}" 3. "{$dynamic.variable}"

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

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

玩得开心:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM