簡體   English   中英

每次重新加載 pom 時停止 IntelliJ IDEA 切換 java 語言級別(或更改默認項目語言級別)

[英]stop IntelliJ IDEA to switch java language level every time the pom is reloaded (or change the default project language level)

使用 IntelliJ 12,我有一個 java 項目,我使用 maven 和 pom.xml。 我的項目使用的是 java8,但在導入項目時似乎默認項目語言級別已設置為 6。

我可以將語言級別更改為 8.0(F4 -> 模塊 -> 語言級別)但是每次我編輯我的 pom.xml 項目級別都會切換回“使用項目語言級別”,我必須再次編輯此設置並且再次。

是否需要將某些內容添加到 pom.xml 以將默認語言級別設置為 8.0?

根據馬克的評論,這是如何做到的:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

vikingsteve 答案的簡短版本是:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

我認為這與 Maven 編譯器插件和 IntelliJ 想法之間的概念沖突有關。 顯然,較新版本的編譯器插件的默認級別為 1.5(請參閱http://maven.apache.org/plugins/maven-compiler-plugin/ )。 因此,如果在項目中完全使用了編譯器插件,並且沒有在 pom.xml 中明確設置編譯器級別,則無論何時重新處理 POM,級別都將恢復為默認值。

因此,Intellij IDEA 忽略了一個概念沖突。 IDE 仍然允許設置項目和模塊設置,但不提供此設置由 pom.xml 控制的警告或反饋。 解決方案要么是明確允許覆蓋 POM 編譯器插件設置(可能不明智,因為在命令行上使用 maven 時會發生什么),或者在 POM 中的此設置生效時停用 IDE 中的控件。

目前的解決方案是在pom中的編譯器插件中設置所需的編譯器級別,重新導入,而不是嘗試在模塊設置中設置。

我正在將一個項目從 JDK 8 升級到 JDK 10+。 我正確指定了編譯器屬性,如下所示:

<properties>
  <maven.compiler.source>10</maven.compiler.source>
  <maven.compiler.target>10</maven.compiler.target>
</properties>

然而,Idea 項目會不斷將語言級別重置為 8。

最終我發現 Idea 的 Maven 導入過程是使用 JDK 8 來導入將語言級別限制為 <= 8 的項目。

為了修復,我更新了設置 -> 構建、執行、部署 -> 構建工具 -> Maven -> 導入以使用 JDK 11 下的“JDK for importer”屬性。

在此處輸入圖片說明

有兩種方法可以做到這一點,在 pom.xml 文件中添加其中一種:

首先 - 添加屬性

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

第二個添加插件

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

如果有幫助,請告訴我。

在我的情況下,所有解決方案都沒有幫助。 我不需要在我的pom.xml指定任何 Java 版本。

我需要打開<project-name>.iml文件並在那里更改 JDK 版本。

原來的:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

更新:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

這完全沒有意義。 我從來沒有為 Java 1.5 指定過 JDK 版本。

為我解決問題的是更新列表:

  • 在項目結構>模塊中:將語言級別 Java 版本更改為 8
  • 在 Project Structure > Project: Java 版本應該是 1.8
  • 在 pom 文件中,上面的響應中指定了相同的更改
  • 在設置 > Java 編譯器 > 將字節碼版本更改為 8
  • 在設置 > maven > 導入 > 導入器的 JDK 應該是 1.8

由於使用 Dropwizard 構建微服務,我在這個問題上掙扎了很多。 最終我發現我在錯誤的pom文件(主服務的pom.xml )中有我的構建屬性。

因此,即使其他包更像是libraries ,我也無法使用 Java 8 語法。

當我將構建插件重構為“全局” .pom.xml文件時,所有子容器都能夠使用新語法。

可以幫助遇到多容器項目問題的人

謝謝它的工作原理。

小心不要犯和我一樣的錯誤。

如果您有配置文件,請在正確的配置文件中添加插件。

<profiles>
    <profile>
        <id>foo</id>
        <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
        </build>
    </profile>
    <profile>
        <id>bar</id>
        .......
    </profile>
<profiles>

對我來說,將 POM(插件加屬性)更新到所需的 Java 編譯器版本(在我的情況下為 1_7)的解決方案有效。 然而,由於每個項目的 .iml 文件是用原始 pom 生成的(默認編譯器版本為 1_5,如上文所述)具有 1_5 的 JDK 版本,這仍然會覆蓋 pom 版本。

我手動刪除了 .idea 文件夾,並通過從更新的 pom 重新導入將模塊導入 IntelliJ。 當我從更新的 POM 重新導入模塊時,我可以看到 iml 文件具有更新的 JDK 版本(在我的情況下為 1_7)。

除了設置 maven 構建屬性添加 maven-compiler-plugin修改 .iml 文件中的 Java 版本之外,我還必須執行一個額外的步驟。 (每個都記錄在其他答案中)。 您還必須在設置中設置編譯器版本

問題:預期 Java 版本:11 但停留在版本:8

  • 我嘗試了幾乎所有的答案,但我仍然被language_level 8卡住,在我的項目或 Intellij IDE 中無處可尋,我發現任何可能與 Java 版本 8 相關的痕跡。

  • 然后我探索了parentpom.xml沒有成功但是在grand-parentpom.xml中,我發現發布版本是8。

解決方案:在屬性中添加以下 3 行會有所不同。

<properties>
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
  <maven.compiler.release>11</maven.compiler.release>
</properties>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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