簡體   English   中英

如何在 IntelliJ IDEA 中禁用 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 中添加動態屬性的虛擬版本,如下圖所示: 設置 Maven Runner 屬性的屏幕截圖

在那里把值讓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>

因為它工作正常。 我認為這將是一些緩存或可能是小錯誤,對提供一些信息沒有重大影響。 所以我想建議你一些選擇

建議-1:

您可以重建您的項目,然后檢查

Build > Rebuild Project

建議-2:

您可以清除ide的緩存

  1. File -> invalidate caches
  2. 然后Restart application

建議-3:

有時愚蠢的技巧可能會解決問題。

  1. 右鍵單擊代碼編輯器
  2. 將鼠標懸停在 Maven 上並展開
  3. 點擊重新導入

建議4:

有一些方法可以解決這個問題,還可以討論版本之間發生的情況。 你可以通過

IntelliJ 檢查給出“無法解析符號”但仍編譯代碼

建議5:

您可以嘗試Michał Wróbel 的博客盡管 maven 正確構建了源代碼,但無法在 IntelliJ 中解析符號 XYZ

建議-6:

你也可以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM