hentikan IntelliJ IDEA untuk beralih level bahasa java setiap kali pom dimuat ulang (atau ubah level bahasa proyek default)

145

Menggunakan IntelliJ 12, saya punya proyek java dan saya menggunakan maven dengan pom.xml. Proyek saya menggunakan java8, tetapi tampaknya tingkat bahasa proyek default telah diatur ke 6 saat mengimpor proyek.

Saya dapat mengubah tingkat bahasa menjadi 8.0 (F4 -> Modul -> Tingkat bahasa) namun setiap kali saya mengedit pom.xml tingkat proyek saya beralih kembali ke "menggunakan tingkat bahasa proyek", dan saya harus mengedit pengaturan ini lagi dan lagi.

Apakah ada sesuatu yang perlu saya tambahkan ke pom.xml untuk mengatur tingkat bahasa default ke 8.0?

Quentin
sumber
2
Apakah pom Anda menentukan level sumber dan target dalam konfigurasi plugin kompiler?
Mark Rotteveel
ya, sumber & target ditetapkan ke 1,8. Namun itu tidak ditentukan selama impor proyek
Quentin
@ Quentin Dalam situasi seperti itu, mungkin yang paling mudah adalah melakukan penutupan proyek di lokasi baru dan membiarkan IntelliJ mengimpornya sebagai gantinya.
Thorbjørn Ravn Andersen

Jawaban:

174

Sesuai komentar Markus, berikut adalah cara melakukannya:

<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
sumber
10
plugin hadir di pom, dengan target 1,8, tetapi tidak mengubah apa pun :(
Quentin
2
Sudahkah Anda mengimpor secara otomatis maven pom Anda diaktifkan? Apakah Anda sudah memeriksa pom induk (dan kakek-nenek), apakah ada 1,6 pengaturan di sana yang mungkin bertentangan?
vikingsteve
1
Memang proyek induk didefinisikan dengan spring-boot-starter-parent-1.1.9.RELEASE.pom.xml dan dalam plugin Management, maven-compiler-plugin diatur ke 1.6 ... Saya mencoba untuk menimpa pengaturan ini tanpa hasil. Sepertinya spring boot 1.2.RC tidak lagi menyertakan maven-compiler-plugin, saya akan mencobanya. - Impor otomatis diaktifkan.
Quentin
Hebat, itu sebabnya. Jika Anda menentukan versi yang sama dari plugin compiler maven, dimungkinkan untuk mengganti pengaturan sumber / target. Mungkin coba itu di root pom.xml proyek Anda.
vikingsteve
2
Dalam kasus saya ini tidak berhasil. Saya harus menghapus pengaturan yang disebutkan dalam jawaban ini dan sebagai gantinya menambahkan yang berikut ini:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
1818
99

Versi pendek dari jawaban vikingsteve adalah:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
DieterDP
sumber
6
Satu gangguan lebih sedikit!
Artur Cichosz
4
Ini bukan hanya versi pendek tetapi versi yang diperlukan dalam kasus saya. Jawaban vikingsteve tidak berhasil untuk saya. Jadi saya menghapus pengaturan itu dan menggunakan yang ini.
Genonim
23

Saya pikir ini ada hubungannya dengan konflik konseptual antara plugin Maven compiler dan ide IntelliJ. Rupanya versi yang lebih baru dari plugin kompiler memiliki tingkat standar 1,5 (lihat http://maven.apache.org/plugins/maven-compiler-plugin/ ). Jadi jika plugin kompiler digunakan sama sekali dalam sebuah proyek, dan level kompiler tidak secara eksplisit diatur di pom.xml, setiap kali POM diproses ulang, level akan kembali ke default.

Jadi ada konflik konseptual yang diabaikan oleh Intellij IDEA. IDE masih memungkinkan seseorang untuk mengatur pengaturan proyek dan modul, tetapi tidak memberikan peringatan atau umpan balik bahwa pengaturan ini dikendalikan oleh pom.xml. Solusi akan secara eksplisit mengizinkan menimpa pengaturan plugin compiler POM (mungkin tidak bijaksana karena apa yang kemudian terjadi ketika Anda menggunakan pakar pada baris perintah), atau untuk menonaktifkan kontrol dalam IDE ketika pengaturan dari POM ini berlaku.

Solusinya saat ini adalah dengan mengatur level kompiler yang diinginkan dalam plugin compiler di pom, re-import, daripada mencoba mengaturnya dalam pengaturan modul.

Peter N. Steinmetz
sumber
1
Sepakat. Kurangnya umpan balik bahwa pengaturan di IDEA hanya akan diabaikan dan diimpor kembali dari POM sangat membingungkan, terutama ketika menggunakan POM induk.
Gillfish
9

Saya meningkatkan proyek dari JDK 8 ke JDK 10+. Saya memiliki properti kompilator yang ditentukan dengan benar sebagai berikut:

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

Namun proyek Idea akan terus mengatur ulang level bahasa ke 8.

Akhirnya saya tahu bahwa proses impor Idea Maven menggunakan JDK 8 untuk mengimpor proyek yang membatasi level bahasa menjadi <= 8.

Untuk memperbaikinya saya memperbarui properti 'JDK untuk importir' di bawah Pengaturan -> Build, Execution, Deployment -> Build Tools -> Maven -> Mengimpor untuk menggunakan JDK 11.

masukkan deskripsi gambar di sini

danw
sumber
Diselesaikan masalah saya. Sepertinya IntelliJ memperbarui JRE internal mereka dengan rilis yang lebih baru (sekitar 2019.2). Cukup sulit untuk dilacak ...
Hasan Aslam
8

Ada dua cara untuk melakukan ini, tambahkan salah satunya di file pom.xml Anda:

Pertama-Tambah Properti

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

kedua - Tambahkan Plugin

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

Beri tahu saya jika itu membantu.

Anuj Teotia
sumber
Saya telah melakukan keduanya dan kompiler masih disetel ulang menjadi 1,5 setiap kali saya mencoba menjalankan kompilasi mvn dari dalam IntelliJ. Namun, itu berfungsi dengan baik ketika dijalankan dari baris perintah di luar IntelliJ.
user26270
1
di IntelliJ, ingatlah untuk mengimpor kembali pengaturan pakar setelah modifikasi. Solusinya bekerja untuk saya.
Pierluigi Vernetto
4

Tidak ada solusi yang membantu dalam kasus saya. Saya tidak perlu menentukan versi Java di blog saya pom.xml.

Saya perlu membuka <project-name>.imlfile dan mengubah versi JDK di sana.

Asli:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Diperbarui:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Ini tidak masuk akal sama sekali. Saya belum menentukan versi JDK untuk Java 1.5.

kleinfreund
sumber
Ini, dengan sendirinya, memecahkan masalah bagi saya di IntelliJ 2019.3, tanpa mengharuskan saya mengubah apa pun di pom saya atau di mana pun. Saya juga tidak pernah menentukan JDK 1.5 di mana saja.
Michael Christoff
Contoh: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León
1

Saya banyak kesulitan dengan masalah ini, karena membangun layanan microsoft dengan Dropwizard. Akhirnya saya mengetahui bahwa saya memiliki properti build saya di file pom yang salah (Layanan utama pom.xml).

Jadi, meskipun paket-paket lain lebih seperti perpustakaan , saya tidak dapat menggunakan sintaks Java 8.

Ketika saya refactored plugin build ke dalam file "global" .pom.xml, semua kontainer anak dapat menggunakan sintaks baru.

Dapat membantu seseorang mengalami masalah dengan proyek multi-kontainer

pengguna3677636
sumber
0

Bagi saya solusi memperbarui POM (plugin plus properti) ke versi kompiler Java yang diperlukan (1_7 dalam kasus saya) berhasil. Namun karena file .iml untuk setiap proyek dihasilkan dengan pom asli (dengan versi kompiler default 1_5 seperti yang dijelaskan oleh seseorang di atas) memiliki versi JDK 1_5, ini masih menimpa versi pom.

Saya menghapus folder .idea secara manual dan mengimpor modul ke IntelliJ dengan impor ulang dari pom yang diperbarui. Ketika saya mengimpor kembali Modul dari POM yang diperbarui, saya dapat melihat bahwa file iml memiliki versi JDK yang diperbarui (1_7 dalam kasus saya).

Shirish Sakhare
sumber