[英]How to disable Intellij IDEA feature which doesn't let me enter closing character “>” in 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 中添加動態屬性的虛擬版本,如下圖所示:
在那里把值將讓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>
因為它工作正常。 我認為這將是一些緩存或可能是小錯誤,對提供一些信息沒有重大影響。 所以我想建議你一些選擇
您可以重建您的項目,然后檢查
Build > Rebuild Project
您可以清除ide的緩存
File -> invalidate caches
Restart application
有時愚蠢的技巧可能會解決問題。
有一些方法可以解決這個問題,還可以討論版本之間發生的情況。 你可以通過
您可以嘗試Michał Wróbel 的博客:盡管 maven 正確構建了源代碼,但無法在 IntelliJ 中解析符號 XYZ
你也可以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.