如何在IntelliJ IDEA中禁用pom.xmlvalidation
我正在使用buildnumber-maven-plugin将Mercurial变更集作为项目内部版本号:
org.codehaus.mojo buildnumber-maven-plugin 1.2 initialize hgchangeset
然后我使用${changeSet}
build.number
${changeSet}
属性在同一个pom.xml
设置build.number
属性:
${changeSet}
但是,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
是的,那看起来很糟糕
有趣。 我已经在IntelliJ IDEA Ultimate 14.1.7和IntelliJ IDEA Community 2016.1.2中测试了这种行为,即使所有Maven检查都关闭,IDEA不知道的属性仍显示为红色。 这看起来是IDEA中的一个错误(或者说它更加慈善,一个未实现的function),当它无法识别属性时它给出的错误不受检查设置的控制。
IDEA的错误跟踪器中有几个相关问题:
- IDEA-96358 :Maven:无法解析环境变量
- IDEA-100272 :Maven:支持隐式属性
在JetBrains支持论坛上还有关于类似问题的post:
- 对于@ VAR @属性值,我的Maven POM文件中的“无法解析符号”
一种可能的解决方法
IDEA-96358的评论以及支持帖中都列出了一种解决方法。 您可以在“设置/构建”,“执行”,“开发/构建工具”/“Maven / Runner /属性”中添加虚拟版本的动态属性,如此屏幕截图所示:
将值放在那里会让IDEA知道它们,所以它不会用红色突出显示它们。 但是,我在测试中发现,由于IDEA将值作为属性传递给Maven,因此它们没有被buildnumber-plugin覆盖,而是当我尝试使用它时,我看到了我的虚拟值。 (我测试使用它的唯一方法是在maven-help-plugin评估目标中,但也许在其他方面使用它时可行吗?)为了能够使用动态设置值,在我的特定构建配置中取消选中“使用项目设置”框并删除虚拟属性,如此屏幕截图所示:
这开始是一个非常烦人的解决方法,好像你有很多Maven构建配置,并且喜欢它们都默认为相同的跑步者设置的能力,你现在必须复制你想要的“真实”设置每个配置,并在项目设置对话框中具有默认值,只是为了“虚拟”值,以便IDEA知道它不应该将引用该属性视为错误。 这还要求您通过构建配置运行所有Maven命令,而不是通过双击“Maven Projects”工具窗口中的生命周期等其他方法。 虽然如果你有很少的构建配置,那么这是你在IDEA中运行Maven的唯一方法,编辑你的pom.xml文件时的颜色红色让你很烦,也许这种解决方法对你来说是一个可接受的权衡。
进一步的步骤
由于看起来IDEA的内置function并不真正涵盖动态生成的属性,我认为解决它的唯一真正方法是说服JetBrains这样做,除非有某种方法在第三方插件中添加function(现在非常超越我的专业知识)。 我建议投票和评论我提到的JIRA跟踪系统中的一张票,或者如果你认为你的问题不同(可能是这样)就创建你自己的票。 此外,您可能希望联系JetBrains支持,特别是如果您有付费订阅。 虽然我怀疑他们有很多优先事项要做(我们都是这样),但我也怀疑更多的人要求某些事情会增加他们积压到积压的可能性。 请求很好的东西很少疼。
因为它工作正常。 我认为这将是一些缓存或可能是一个小错误,没有产生一些信息的重大影响。 所以我想建议你一些选择
建议1:
您可以重建项目然后检查
Build > Rebuild Project
建议2:
您可以清除ide的缓存
-
File -> invalidate caches
- 然后
Restart application
建议-3:
有时愚蠢的技巧可能会解决问题。
- 右键单击代码编辑器
- 将鼠标hover在Maven上并展开
- 单击重新导入
建议4:
有一些方法可以解决这个问题,还可以讨论版本到版本的情况。 你可以通过
IntelliJ检查给出“无法解析符号”但仍编译代码
建议-5:
您可以尝试MichałWróbel的博客 : 尽管maven正确构建了源代码,但无法在IntelliJ中解析符号XYZ
建议-6:
您还可以在IntelliJ Idea的每个小变化中disable reading pom.xml
: Intellij IDEA和Maven,禁用每次小变化时读取pom.xml,即使没有保存
尝试文件 – >设置 – >编辑器 – >检查 – >取消选中“Maven模型检查”并应用。
该问题询问如何停用validation,因为未修复的IntelliJ错误导致动态pom.xml变量中的语法“$ {dynamic.variable}”出现错误。
相反,这是一个bug的解决方法,所以错误的错误通知消失,maven仍然接受变量,每个人都很高兴:
按此顺序更改变量语法(不开玩笑):1。“$ {dynamic.variable}”2。“{dynamic.variable}”3。“{$ dynamic.variable}”
IntelliJ现在将接受它作为正确,maven也将解析并接受动态变量而没有问题。 它显然是一个未记录的maven语法,由于某种原因,它已被实现为IntelliJ IDE中正确且唯一的语法。
我希望这有助于每个人,尽管它没有回答实际提出的问题,但却消除了提出问题的理由。
玩的开心 :)
- 在执行JPA查询时获取NoSuchMethodError:javax.persistence.Table.indexes()
- 在IntelliJ for Maven项目中添加资源
- 部署JavaFX应用程序,创建JAR以及自包含应用程序和本机安装程序的最佳方法是什么
- 如何从IntelliJ IDEA启动Vert.x服务器?
- Gradle:多个java项目的公共资源依赖项
- @Nullable / @NotNull与IntelliJ IDEA,Maven和JSR 305
- Intellij IDEA未检测到更改
- Intellij – 像在Eclipse中一样添加项目依赖项
- 如何在IntelliJ IDEA中指定哪个@Tag应该用于JUnit