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 /属性"中添加虚拟版本的动态属性,如此屏幕截图所示:

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

这开始是一个非常烦人的解决方法,好像你有很多Maven构建配置,并且喜欢它们都默认为相同的跑步者设置的能力,你现在必须复制你想要的"真实"设置每个配置,并在项目设置对话框中具有默认值,只是为了"虚拟"值,以便IDEA知道它不应该将引用该属性视为错误.这还要求您通过构建配置运行所有Maven命令,而不是通过双击"Maven Projects"工具窗口中的生命周期等其他方式.虽然如果你有很少的构建配置,那么这是你在IDEA中运行Maven的唯一方法,编辑你的pom.xml文件时的颜色红色让你很烦,也许这种解决方法对你来说是一个可接受的权衡.
由于看起来IDEA的内置功能并不真正涵盖动态生成的属性,我认为解决它的唯一真正方法是说服JetBrains这样做,除非有某种方法在第三方插件中添加功能(现在已经超出了我的专业知识).我建议投票和评论我提到的JIRA跟踪系统中的一张票,或者如果你觉得你的问题不够(可能是这样)就创建你自己的票.此外,您可能希望联系JetBrains支持,特别是如果您有付费订阅.虽然我怀疑他们有很多优先事项要做(我们都是这样),但我也怀疑更多的人要求某些事情会增加他们积压到积压的可能性.请求很好的东西很少疼.
恕我直言,没有一个 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)
因为它工作正常。我认为这将是一些缓存或可能是小错误,对提供一些信息没有重大影响。所以我想建议你一些选择
您可以重建您的项目,然后检查
Build > Rebuild Project
Run Code Online (Sandbox Code Playgroud)
您可以清除ide的缓存
File -> invalidate cachesRestart application有时愚蠢的技巧可能会解决问题。
有一些方法可以解决这个问题,还可以讨论版本之间发生的情况。你可以通过
你可以试试Micha?Wróbel 的博客:尽管 maven 正确构建了源代码,但无法在 IntelliJ 中解析符号 XYZ
您还可以disable reading pom.xml在 IntelliJ Idea:
Intellij IDEA 和 Maven 中的每一个小变化上,禁用读取 pom.xml 的每个小变化,即使没有保存