web-dev-qa-db-ja.com

PomがリロードされるたびにIntelliJ IDEAを停止してJava言語レベルを切り替える(またはデフォルトのプロジェクト言語レベルを変更する)

IntelliJ 12を使用すると、Javaプロジェクトがあり、pom.xmlでmavenを使用します。私のプロジェクトはJava8を使用していますが、プロジェクトのインポート中にデフォルトのプロジェクト言語レベルが6に設定されているようです。

言語レベルを8.0(F4->モジュール->言語レベル)に変更できますが、pom.xmlを編集するたびにプロジェクトレベルは「プロジェクト言語レベルを使用」に戻され、この設定を再度編集する必要があります。再び。

デフォルトの言語レベルを8.0に設定するためにpom.xmlに追加する必要があるものはありますか?

122
Quentin

マークのコメントによると、これを行う方法は次のとおりです。

<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>
148
vikingsteve

Vikingsteveの回答の短縮版は次のとおりです。

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

これは、MavenコンパイラプラグインとIntelliJのアイデアの間の概念的な矛盾に関係していると思います。どうやら、コンパイラプラグインの新しいバージョンのデフォルトレベルは1.5です( http://maven.Apache.org/plugins/maven-compiler-plugin/ を参照)。そのため、コンパイラプラグインがプロジェクトでまったく使用されておらず、pom.xmlでコンパイラレベルが明示的に設定されていない場合、POMが再処理されるたびに、レベルはデフォルトに戻ります。

そのため、Intellij IDEAで無視される概念上の矛盾があります。 IDEでは、プロジェクトとモジュールの設定を設定できますが、この設定がpom.xmlによって制御されているという警告やフィードバックはありません。解決策は、POMコンパイラプラグインの設定を明示的にオーバーライドできるようにするか(コマンドラインでmavenを使用するとどうなるかという理由ではないかもしれません)、またはこの設定がIDE POMが有効です。

現時点での解決策は、モジュール設定で設定しようとするのではなく、pomのコンパイラプラグインで目的のコンパイラレベルを再インポートすることです。

22

これを行うには2つの方法があり、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>

役立つかどうか教えてください。

8
Anuj Teotia

プロジェクトを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 for importer」プロパティを更新しましたJDK 11。

enter image description here

2
danw

私の場合、解決策はありませんでした。 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バージョンを指定したことはありません。

2
kleinfreund

Dropwizardでマイクロサービスを構築するため、私はこの問題に苦労しました。最終的に、ビルドプロパティが間違っているpomファイル(メインサービスのpom.xml)にあることがわかりました。

そのため、他のパッケージはlibrariesに似ていますが、Java 8構文を使用できませんでした。

ビルドプラグインを「グローバル」.pom.xml "ファイルにリファクタリングしたとき、すべての子コンテナは新しい構文を使用できました。

複数コンテナのプロジェクトに問題がある人を助けることができます

1
user3677636

mavenビルドプロパティの設定maven-compiler-pluginの追加 、および Javaバージョン 。 (それぞれ他の回答で既に文書化されています)。また、 設定でコンパイラのバージョンを設定 する必要があります。

0
hosford42

私にとっては、POM(プラグインとプロパティ)を必要なJavaコンパイラバージョン(私の場合は1_7)に更新するソリューションが機能しました。ただし、各プロジェクトの.imlファイルは、元のpom(上記の誰かが説明したデフォルトのコンパイラバージョン1_5を使用)で生成されたため、JDKバージョン1_5を使用しているため、pomバージョンは上書きされます。

.ideaフォルダーを手動で削除し、更新されたPOMから再インポートしてモジュールをIntelliJにインポートしました。更新されたPOMからモジュールを再インポートすると、imlファイルに更新されたJDKバージョン(この場合は1_7)が含まれていることがわかりました。

0
Shirish Sakhare