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

24

我正在使用buildnumber-maven-plugin将Mercurial changeset作为项目版本号:

<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}属性来设置同一个pom.xml文件中的build.number属性:

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

然而,IntelliJ IDEA 抱怨它无法解析符号 "changeSet":

enter image description here

此外,在项目工具窗口中,模块根目录和受影响的 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

尝试这个:https://dev59.com/-YPba4cB1Zd3GeqPxdGu#26099823 - Carlos Andrés García
使用 git-commit-id-plugin 时出现了相同的问题。 - Adam
5个回答

26

嗯,看起来有问题

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

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

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

一种可能的解决方法

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

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

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

进一步的步骤

由于IDEA的内置功能似乎并没有真正涵盖动态生成的属性,我认为唯一真正解决它的方法是说服JetBrains去做,除非有一种方法可以在第三方插件中添加功能(这已经超出了我的专业知识)。我建议您投票并评论我提到的JIRA跟踪系统中的其中一个问题,或者如果您认为您的问题足够不同(可能是),则创建自己的问题。此外,您可能希望联系JetBrains支持,特别是如果您与他们有付费订阅。虽然我怀疑他们有很多工作要做(我们都有),但我也怀疑更多的人要求某些东西会增加它移动到他们待办事项列表的机会。礼貌地请求某些东西很少会有坏处。


点赞那些IntelliJ的问题似乎是最好的长期解决方案。 :) - Anton Koscejev
绕过可以使用,谢谢。我可以接受在我的本地环境中使用虚拟值,因为在其他环境上的构建是在 IDE 之外使用 CI 工具完成的。 - Dragan Bozanovic
FYI:IDEA-96358 应该已经修复。 - Roeland Van Heddegem

11

尊敬的客户,SkyWalker提供的解决方案对我并没有起作用。

但是以下解决方案对我有效:

只需在属性行上方添加以下内容:

<!--suppress UnresolvedMavenProperty -->

所以你最终会得到:
<!--suppress UnresolvedMavenProperty -->
<git.version>${git.commit.time}.${git.commit.id.abbrev}</git.version>

6

由于它目前运行良好,我认为可能是一些缓存或小错误,并且没有重大影响,只提供了一些信息。因此,我想给您提供一些选项

建议-1:

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

Build > Rebuild Project

建议-2:

您可以清除您的IDE缓存

  1. 文件 -> 无效缓存
  2. 然后 重新启动应用程序

建议-3:

有时一个简单的技巧可以解决问题。

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

建议-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中禁用每次小更改都读取pom.xml:

Intellij IDEA and Maven, disable reading pom.xml on every small change, even without a save


2
尝试:文件-> 设置-> 编辑器-> 检查-> 取消选中“Maven模型检查”,然后点击应用。

1
关闭Maven检查对大多数问题都有效,但似乎不影响“无法解析符号”的问题。如果它对您有用,请告诉我它适用的IDEA版本以及您可能更改的任何其他相关设置或检查。 - user65839
2017.2的一个好的解决方法。我的pom.xml现在在右上角打了绿勾,没有红色高亮显示。不过如果Jetbrains能够修复这个问题仍然是很好的。 - Adam
说得过早了。解决方法在我使用插件配置中的这些动态属性时有效,但在我在project.properties部分中使用变量时则无效。 - Adam

1
这个问题是关于如何停用验证,因为未修复的IntelliJ错误导致动态pom.xml变量中的语法"${dynamic.variable}"出现误报。
相反,这里有一个解决该错误的方法,使得误报通知消失,而且maven仍然接受变量,所有人都很满意:
按照以下顺序更改变量语法(不是玩笑):
1. "${dynamic.variable}" 2. "{dynamic.variable}" 3. "{$dynamic.variable}"
IntelliJ现在将其视为正确的,并且maven也会解析并接受动态变量,没有问题。显然,这是一种未记录的maven语法,由于某种原因已被实现为IntelliJ IDE中的正确和唯一语法。
希望这可以帮助每个人,尽管它没有回答实际提问的问题,但消除了提问的原因。
玩得开心 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接