如何在IntelliJ IDEA中禁用pom.xml验证是的,这看起来坏了可能的解决方法进一步的步骤

2022-09-01 20:33:34

我正在使用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.numberpom.xml

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

然而,IntelliJ IDEA抱怨说:Cannot resolve symbol 'changeSet'

enter image description here

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

我在“设置”中尝试了所有提供的+选项和Maven配置;没有任何帮助。AltEnter

一切都构建并正常工作,我只想摆脱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

答案 1

是的,这看起来坏了

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

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

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

可能的解决方法

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

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

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

进一步的步骤

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


答案 2

恕我直言,《天行者》的解决方案都不适合我。

但以下一个对我有用:

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

<!--suppress UnresolvedMavenProperty -->

因此,您最终会得到:

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

推荐