Apa yang menyebabkan proyek Maven yang diimpor di Eclipse menggunakan Java 1.5 sebagai ganti Java 1.6 dan bagaimana saya memastikannya tidak?

209

Saya mengimpor proyek Maven dan menggunakan Java 1.5 meskipun saya telah mengkonfigurasi 1.6 sebagai Eclipse default saya Preferences->Java->Installed JREs.

Ketika saya mengubah proyek Maven untuk menggunakan 1.6 JRE, masih ada kesalahan build yang tersisa dari ketika proyek menggunakan Java 1.5 (saya jelaskan kesalahan build ini sebelumnya: Saya telah membangun kesalahan dengan m2eclipse tetapi tidak dengan maven2 pada baris perintah - Apakah m2eclipse saya salah konfigurasi? )

Saya akan menghapus proyek dan mencoba lagi tapi saya ingin memastikan kali ini menggunakan Java 1.6 dari awal untuk melihat apakah ini menghilangkan masalah build.

Bagaimana saya memastikan proyek menggunakan Java 1.6 ketika saya mengimpornya?

Chris Collins
sumber
4
m2eclipse mengabaikan apa yang Anda konfigurasikan untuk default Eclipse. Itu akan selalu menggunakan 1.5 secara default. Namun dalam kasus Anda, proyek menggunakan plugin-maven-compiler dan menetapkan versi secara eksplisit ke 1.5. Anda perlu mengubahnya di pom dan memperbarui konfigurasi proyek untuk mengubah versi. Namun saya sudah mencoba ini dan itu tidak berhasil untuk saya. Saya cukup yakin itu bukan masalah meskipun apa yang orang lain katakan di pertanyaan Anda yang lain.
Raoul Duke
1
Tidak, m2eclipse tidak akan selalu default ke 1,5, itu akan default ke pengaturan maven-compiler-plugin.
Pascal Thivent
1
Bagaimana Anda mengubah pengaturan maven-compiler-plugin?
Lokathor

Jawaban:

248

Plugin m2eclipse tidak menggunakan default Eclipse, plugin m2eclipse mendapatkan pengaturan dari POM. Jadi jika Anda ingin proyek Maven dikonfigurasi untuk menggunakan pengaturan Java 1.6 ketika diimpor di bawah Eclipse, konfigurasikan dengan maven-compiler-plugintepat, seperti yang telah saya sarankan:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

Jika proyek Anda sudah diimpor, perbarui konfigurasi proyek ( klik kanan pada proyek kemudian Maven V Perbarui Konfigurasi Proyek ).

Thivent Pascal
sumber
1
Tolong jangan berteriak. Itu tidak sopan. Itu berhasil setelah menghapus dan mengimpor kembali proyek. Tapi tidak sebaliknya.
Raoul Duke
6
@ Raoul Ini berfungsi tanpa mengimpor ulang proyek jika Anda Perbarui Konfigurasi Proyek seperti yang saya tulis. Saya melakukan tes ini 3 kali dan itu hanya berfungsi pada mesin saya.
Pascal Thivent
Sejelas jawaban Pascal adalah (saya tambah 1) 'memperbarui konfigurasi proyek' tampaknya tidak berfungsi dalam semua keadaan karena saya harus menghapus proyek juga, dan saya mencoba banyak hal lain (mungkin bug dalam versi gerhana)
rogermushroom
untuk versi Java yang lebih baru, lihat jawaban ini
Baris
33

Saya menambahkan ini ke pom.xml saya di bawah deskripsi proyek dan berhasil:

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>
hogi
sumber
1
Ini lebih sederhana daripada jawaban yang diterima dan juga baik untuk saya.
Brick
1
Ini bekerja untuk saya namun jawaban yang diterima tidak berhasil.
Sanjay Singh
1
Apa perbedaan antara ini dan mengkonfigurasi maven-compiler-plugin (sesuai jawaban yang diterima)? Kedua cara itu bekerja untuk saya.
Aamir Rizwan
Jika Anda menggunakan Java 9, ketahuilah bahwa penomoran versi telah berubah. Jadi gunakan 9 bukan 1.9. <properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties>
chux
Saya pikir pengaturan properti "java.version" dan menggunakannya dalam konfigurasi build dari konfigurasi "maven-compiler-plugin" sudah cukup. Jelas, properti "maven.compiler.source" dan "maven.compiler.target" harus memiliki beberapa interaksi plugin Eclipse Maven karena masalahnya baru saja menghilang.
JasonTolotta
29

Saya ingin menambahkan sesuatu ke jawaban yang sudah disediakan. maven-compiler-plugin secara default akan mengkompilasi proyek Anda menggunakan Java 1.5 yang mana m2e mendapatkan informasinya.

Itu sebabnya Anda harus secara eksplisit mendeklarasikan maven-compiler-plugin di proyek Anda dengan sesuatu selain 1.5. Efektif Anda secara pom.xmlimplisit akan menggunakan set default di maven-compiler-plugin pom.xml .

Nicholas
sumber
6
bagi saya ini lebih jelas menjawab "mengapa 1,5 ketika saya membuat proyek Maven baru?"
Don Cheadle
1
@LIttleAncientForestKami diverifikasi dengan 3.7.0, saat ini nilainya ditetapkan sebagai konstanta DEFAULT_SOURCEdan DEFAULT_TARGET, tetapi keduanya masih diatur ke 1.5.
Adam Burley
sekarang harus 1,6, kan? Saya heran karena sepertinya masih menggunakan 1,5 untuk saya.
Jalur
@ Baris: Tidak, itu akan menjadi 1,5 sampai akhir ayat-maven yang dikenal sebagai pom induk super efektif tidak boleh pernah berubah.
Nicholas
Apakah ini ironis? ;) Situs yang tertaut dalam jawaban mengatakan "Perhatikan juga bahwa saat ini pengaturan sumber default adalah 1,6 dan pengaturan target default adalah 1,6" ..
Baris
27
<project>

    <!-- ... -->

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

</project>
pitchblack408
sumber
8
Di dalam <build> </build>
Phillip Kamikaze
tidak suka jawaban ini, karena ini hanya kode, dan saya tidak melihat keuntungan daripada yang diterima (mungkin karena tidak dijelaskan ..)
Baris
8

Berikut ini adalah akar penyebab java 1.5:

Perhatikan juga bahwa saat ini pengaturan sumber default adalah 1,5 dan pengaturan target default adalah 1,5, terlepas dari JDK yang Anda jalankan dengan Maven. Jika Anda ingin mengubah default ini, Anda harus menetapkan sumber dan target.

Referensi: Plugin Kompiler Apache Mavem

Berikut ini rinciannya:

Pom.xml polos

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

    <groupId>com.pluralsight</groupId>
    <artifactId>spring_sample</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

Plugin berikut diambil dari versi POM yang diperluas (POM Efektif),

Ini bisa didapat dengan perintah ini dari baris perintah yang C:\mvn help:effective-pomsaya taruh di sini potongan kecil bukan seluruh pom.

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>default-compile</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      <execution>
        <id>default-testCompile</id>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Bahkan di sini Anda tidak melihat di mana versi java didefinisikan, mari menggali lebih lanjut ...

Unduh plugin, Apache Maven Compiler Plugin »3.1 sebagai tersedia di jar dan buka di alat kompresi file seperti 7-zip

Lintasi tabung dan temukan

plugin.xml

file di dalam folder

maven-compiler-plugin-3.1.jar \ META-INF \ maven \

Sekarang Anda akan melihat bagian berikut dalam file,

      <configuration>
    <basedir implementation="java.io.File" default-value="${basedir}"/>
    <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/>
    <classpathElements implementation="java.util.List" default-value="${project.testClasspathElements}"/>
    <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/>
    <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
    <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
    <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
    <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
    <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
    <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
    <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
    <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
    <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
    <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
    <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
    <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
    <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
    <mojoExecution implementation="org.apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution>
    <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
    <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/>
    <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
    <showWarnings implementation="boolean" default-value="false">${maven.compiler.showWarnings}</showWarnings>
    <skip implementation="boolean">${maven.test.skip}</skip>
    <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>
    <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource>
    <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget>
    <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
    <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
    <mavenSession implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
    <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
  </configuration>

Lihatlah kode di atas dan cari tahu 2 baris berikut

    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>

Semoga berhasil.

anak nakal
sumber
1
Iya. Ini tidak ada hubungannya dengan Eclipse. Misalnya, Anda mendapatkan masalah yang sama di IntelliJ IDEA jika membuat proyek Maven dengan quickstartartefak.
Jan Hettich
Hai, terima kasih telah memposting akar penyebab masalah:) Saya sangat menghargainya!
IanGabes
6

JRE Anda mungkin ditentukan dalam menjalankan konfigurasi. Ikuti langkah-langkah ini di Eclipse untuk mengubah build JRE.

1) Klik kanan pada proyek dan pilih Run As > Run Configurations

2) Dari jendela Run Configurations, pilih konfigurasi build proyek Anda di panel kiri. Di sebelah kanan, Anda akan melihat berbagai tab: Main, JRE, Refresh, Source, ...

3) Klik pada tab JRE, Anda akan melihat sesuatu seperti ini

masukkan deskripsi gambar di sini

4) Secara default, Work Default JRE (JRE yang Anda pilih sebagai default di dalam Preferences-> Java-> Installed JREs ) akan digunakan. Jika Anda ingin menggunakan JRE lain yang terinstal, centang kotak Alternate JRE dan pilih JRE pilihan Anda dari dropdown.

Tony Vu
sumber
Terima kasih atas jawaban ini, konfigurasi menjalankan saya berjalan dengan default workspace jadi ini sangat membantu!
Damir Ciganović-Janković
Ini membantu, tidak percaya kami mengabaikan ini!
phil oO
3

Solusi paling sederhana di Springboot

Saya akan memberi Anda yang paling sederhana jika Anda menggunakan Springboot:

<properties>
  <java.version>1.8</java.version>
</properties>

Kemudian, klik kanan pada proyek Eclipse Anda: Maven> Perbarui proyek> Perbarui konfigurasi proyek dari pom.xml

Itu harus dilakukan.

sancho21
sumber
2

Pengaturan spesifik proyek

Satu lagi tempat di mana ini bisa salah adalah dalam pengaturan spesifik proyek, di Eclipse.

  1. properti proyek: klik proyek Anda dan salah satu dari yang berikut:

    • Alt + Enter
    • Menu> Proyek> Properti
    • klik kanan proyek Anda> properti proyek (item terakhir di menu)
  2. klik pada "Java Compiler"

  3. Hapus centang "Aktifkan pengaturan spesifik proyek" (atau ubah semuanya dengan tangan).

Karena persyaratan klien, kami memungkinkan mereka mengaktifkan proyek-proyek kami di 1.6. Ketika diperlukan untuk meningkatkan ke 1.7, kami mengalami kesulitan karena kami perlu mengubah versi java di semua tempat:

  • POM proyek
  • Eclipse Workspace default
  • pengaturan spesifik proyek
  • mengeksekusi mesin virtual (1,6 digunakan untuk semuanya)
manuelvigarcia
sumber
1

Satu lagi alasan yang mungkin jika Anda menggunakan Tycho dan Maven untuk membangun bundel, bahwa Anda memiliki lingkungan eksekusi yang salah ( Bundle-RequiredExecutionEnvironment) dalam file manifes ( manifest.mf) yang ditentukan. Sebagai contoh:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Engine Plug-in
Bundle-SymbolicName: com.foo.bar
Bundle-Version: 4.6.5.qualifier
Bundle-Activator: com.foo.bar.Activator
Bundle-Vendor: Foobar Technologies Ltd.
Require-Bundle: org.eclipse.core.runtime,
 org.jdom;bundle-version="1.0.0",
 org.apache.commons.codec;bundle-version="1.3.0",
 bcprov-ext;bundle-version="1.47.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.5
Export-Package: ...
...
Import-Package: ...
...

Dalam kasus saya, semuanya baik-baik saja Plugin compiler (maven dan tycho normal juga) ditetapkan dengan benar, masih m2 menghasilkan tingkat kepatuhan lama karena manifes. Saya pikir saya berbagi pengalaman.

Gábor Lipták
sumber
1

Saya menemukan bahwa masalah saya adalah seseorang melakukan file .project dan .classpath yang memiliki referensi ke Java1.5 sebagai JRE default.

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
    <attributes>
        <attribute name="owner.project.facets" value="java"/>
    </attributes>
</classpathentry>

Dengan menutup proyek, menghapus file, dan kemudian mengimpor kembali sebagai proyek Maven, saya dapat mengatur proyek dengan benar untuk menggunakan JRE workspace atau jdk yang relevan tanpa kembali ke 1,5. Dengan demikian, hindari memeriksa file .project dan .classpath SVN Anda

Semoga ini bisa membantu orang lain.

iowatiger08
sumber
0

Jika Anda ingin memastikan bahwa proyek yang baru dibuat atau proyek yang diimpor di Eclipse menggunakan versi java default lain dari Java 1.5, Anda dapat mengubah konfigurasi di maven-compiler-plugin.

  • Buka folder .m2 / repositori / org / apache / maven / plugins / maven-compiler-plugin / 3.1
  • Buka maven-compiler-plugin-3.1.jar dengan program zip.
  • Buka META-INF / maven dan buka plugin.xml
  • Di baris berikut:
    <source implementation = "java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </source>
    <target implementasi = "java.lang.String" nilai-default = "1,5"> $ {maven.compiler.target} </target>

  • ubah nilai default menjadi 1,6 atau 1,8 atau apa pun yang Anda suka.

  • Simpan file dan pastikan itu ditulis kembali ke file zip.

Mulai sekarang semua proyek Maven baru menggunakan versi java yang Anda tentukan.

Informasi dari posting blog berikut: https://sandocean.wordpress.com/2019/03/22/directly-generating-maven-projects-in-eclipse-with-java-version-newer-than-1-5/

pengguna1201626
sumber
0

Untuk mengubah versi JDK, Anda dapat melakukan:

1- Project> Properties
2- Pergi ke Java Build Path
3- Di Libraries, pilih JRE System ... dan klik Edit
4- Pilih versi yang sesuai dan validasi

Achref EL Mouelhi
sumber