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


145

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

言語レベルを8.0(F4-> Modules-> Language level)に変更できますが、pom.xmlを編集するたびに、プロジェクトレベルが「use project language level」に戻り、この設定を再度編集する必要があります。再び。

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


2
あなたのpomは、コンパイラプラグイン設定でソースとターゲットのレベルを指定していますか?
Mark Rotteveel、2014年

はい、ソースとターゲットは1.8に設定されています。ただし、プロジェクトのインポート中には指定されませんでした
Quentin '20

@Quentinこのような状況では、プロジェクトを新しい場所に再クローンして、IntelliJに代わりに新しいプロジェクトをインポートさせるのが最も簡単な場合があります。
するThorbjörnRavnアンデルセン

回答:


174

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

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

10
プラグインは、1.8ターゲットのpomにありますが、何も変更しません:(
Quentin

2
maven pomの自動インポートが有効になっていますか?親(および祖父母)のポンポンを確認しましたか?競合する可能性のある1.6の設定はありますか?
vikingsteve 2014年

1
実際、親プロジェクトはspring-boot-starter-parent-1.1.9.RELEASE.pom.xmlで定義されており、pluginManagementでmaven-compiler-pluginが1.6に設定されています...この設定をオーバーライドしようとしましたが、成功しませんでした。Spring Boot 1.2.RCにはmaven-compiler-pluginが含まれていないようです。試してみましょう。-自動インポートが有効になっています。
クエンティン

それが理由かもしれません。同じバージョンのmavenコンパイラプラグインを指定すると、ソース/ターゲット設定をオーバーライドできる可能性があります。おそらく、プロジェクトのルートpom.xmlで試してみてください。
vikingsteve 2014年

2
私の場合、これはうまくいきませんでした。私はこの回答で述べられている設定を削除し、代わりに以下を追加する必要がありました:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genonymous

99

vikingsteveの回答の短いバージョンは次のとおりです。

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

6
煩わしさが1つ減ります!
Artur Cichosz 2017年

4
これは単なる短いバージョンではなく、私の場合必要なバージョンでした。vikingsteveの答えはうまくいきませんでした。そこで、その設定を削除して、これを使用しました。
有名な

23

これは、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のコンパイラプラグインで目的のコンパイラレベルを再インポートすることです。


1
同意した。IDEAの設定が無視され、POMから再インポートされるというフィードバックがないため、特に親POMを使用している場合は非常に混乱します。
ギルフィッシュ2016

9

プロジェクトをJDK 8からJDK 10+にアップグレードしています。コンパイラのプロパティを次のように正しく指定しました。

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

ただし、アイデアプロジェクトは言語レベルを8にリセットし続けます。

最終的に私は、IdeaのMavenインポートプロセスがJDK 8を使用して、言語レベルを8以下に制限するプロジェクトをインポートしていたことに気付きました。

修正するには、「設定->ビルド、実行、デプロイメント->ビルドツール-> Maven->インポート」の「JDK for importer」プロパティを更新して、JDK 11を使用します。

ここに画像の説明を入力してください


私の問題を解決しました。IntelliJが内部のJREを新しいリリース(2019.2前後のどこか)で更新したようです。追跡するのはかなり難しい...
Hasan Aslam

8

これには2つの方法があり、pom.xmlファイルにいずれかを追加します。

最初にプロパティを追加

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

2番目-プラグインを追加

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

それが役立つかどうか私に知らせてください。


これらの両方を実行しましたが、IntelliJ内からmvn compileを実行しようとするたびに、コンパイラーはまだ1.5にリセットされています。ただし、IntelliJの外部のコマンドラインから実行すると正常に動作します。
user26270

1
IntelliJでは、変更後にMaven設定を再インポートすることを忘れないでください。解決策は私のために働いた。
Pierluigi Vernetto

4

私の場合、解決策はどれも役に立ちませんでした。私は私のJavaバージョンを指定する必要はありませんでしたpom.xml

私は開く必要がありました <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バージョンを指定していません。


これで、IntelliJ 2019.3で問題が解決しました。ポンや他の場所を変更する必要はありません。同様に、JDK 1.5をどこにも指定していません。
マイケルクリストフ

例:<... LANGUAGE_LEVEL = "JDK_11">
Daniel

1

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

したがって、他のパッケージはライブラリのようですに、Java 8構文を使用できませんでした。

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

マルチコンテナプロジェクトで問題が発生した場合に役立ちます


0

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.