Cara memperbaiki java.lang.UnsupportedClassVersionError: Versi major.minor tidak didukung

1573

Saya mencoba menggunakan Notepad ++ sebagai alat all-in-one saya edit, jalankan, kompilasi, dll.

Saya telah menginstal JRE , dan saya telah mengatur variabel jalur saya ke .../bindirektori.

Ketika saya menjalankan "Hello world" saya di Notepad ++, saya menerima pesan ini:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Saya pikir masalahnya di sini adalah tentang versi; beberapa versi Java mungkin lama atau terlalu baru.

  1. Bagaimana saya memperbaikinya?
  2. Haruskah saya menginstal JDK, dan mengatur variabel path saya ke JDK alih-alih JRE?
  3. Apa perbedaan antara PATHvariabel dalam JRE atau JDK?
ERJAN
sumber
Apakah Anda menginstal jdk juga? jre adalah lingkungan Java RunTime, Untuk membuat aplikasi java, Anda memerlukan jdk juga
CyprUS
ya saya lakukan, dan sekarang variabel jalur saya menunjuk ke tempat jdk. namun saya masih memiliki kesalahan "versi minor 51.0" yang tidak didukung ini, apakah Anda pikir saya harus menginstal versi jdk yang lebih lama? im menggunakan jdk 1.7.0
ERJAN
20
Ini terjadi pada saya di Mac OS X ketika saya mengalami masalah karena situasi aneh Apple Java 6 dan Oracle java 7 di OSX hari ini. versi singkat: Kompilasi dengan JDK7, Jalankan dengan JDK6, dapatkan ini.
Warren P
7
Dalam java, ClassName harus
dimulai
5
Untuk El Captain, jawaban ini telah diperbaiki untuk saya: stackoverflow.com/a/34201991/1615594
tsuz

Jawaban:

1940

Nomor versi yang ditampilkan menjelaskan versi JRE yang kompatibel dengan file kelas.

Angka-angka utama yang dilaporkan adalah:

Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Sumber: Wikipedia )

Untuk memperbaiki masalah sebenarnya, Anda harus mencoba menjalankan kode Java dengan versi Java JRE yang lebih baru atau menentukan parameter target ke kompiler Java untuk memerintahkan kompiler membuat kode yang kompatibel dengan versi Java sebelumnya.

Misalnya, untuk menghasilkan file kelas yang kompatibel dengan Java 1.4, gunakan baris perintah berikut:

javac -target 1.4 HelloWorld.java

Dengan versi Java compiler yang lebih baru, Anda cenderung mendapatkan peringatan tentang lintasan kelas bootstrap yang tidak disetel. Informasi lebih lanjut tentang kesalahan ini tersedia di posting blog Peringatan javac baru untuk pengaturan sumber yang lebih lama tanpa bootclasspath .

Juha Palomäki
sumber
167
"Nomor versi yang ditampilkan menjelaskan versi mana jika Java digunakan untuk mengkompilasi kode." Tidak. Ini menunjukkan versi JRE yang kompatibel dengan file kelas. Menggunakan opsi kompilasi silang, Anda dapat menggunakan 1,7 JDK untuk mengkompilasi kode dengan versi kelas 1.1 (hingga 1.7).
Andrew Thompson
85
Jawaban ini tidak menjelaskan bagaimana cara memperbaikinya seperti pertanyaan yang diajukan?
Jonathan Leung
7
Ini adalah solusi yang bagus untuk mengkompilasi ke versi sebelumnya dari Eclipse secara langsung: stackoverflow.com/a/16345710/2091700
Alphaaa
19
DALAM proyek gerhana => Proerties => kompiler java; atur "tingkat kepatuhan kompiler" ke versi sesuai dengan jre atau jdk Anda. Bagi saya, ini 1,6 untuk jre 1,6
Sam
5
Ini dapat terjadi ketika sumber kompiler diatur dalam ketidaksesuaian dengan JRE / JDK yang sedang dikompilasi. Misalnya saya menemukan nilai di bawah ini dari folder eclipse .settings, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7. Dan kompiler saya adalah 1.6.0_32. Masalahnya teratasi setelah mengubah nilai menjadi 1.6. Masalahnya berasal setelah saya menyalin proyek dari ruang kerja yang berbeda di mana saya menggunakan JDK 1.7 :(
Gana
367

java.lang.UnsupportedClassVersionError terjadi karena JDK lebih tinggi selama waktu kompilasi dan JDK lebih rendah selama runtime.

Vivek Kumar Ray
sumber
11
+1: mengubah tautan simbolik ini ( /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) ke versi yang digunakan untuk kompilasi dengan javac menyelesaikannya
ezdazuzena
1
Bagaimana saya bisa membuat perubahan di atas?
Ankur Raiyani
8
Project -> Properties -> Java Compiler Mengaktifkan pengaturan spesifik proyek. Kemudian pilih Tingkat Kepatuhan Kompiler ke 1.7, 1.6 atau 1.5, buat dan uji aplikasi Anda.
Vivek Kumar Ray
Ketika saya pindah ke Java 7, entah bagaimana Eclipse terus berusaha berjalan di Java 6 ... tidak tahu mengapa. Mencopot JDK lama berhasil untuk saya.
HDave
9
@ezdazuzena gunakan sudo update-alternatives --config javauntuk melakukannya.
Thorbjørn Ravn Andersen
115

Di Eclipse, saya hanya pergi ke menu perintah Window -> Preferences -> Java -> Compiler dan kemudian mengatur "Level kepatuhan kompiler" menjadi 1,6.

Cacovsky
sumber
3
Dalam gerhana, kadang-kadang aspek proyek juga perlu diubah ke versi java yang sesuai.
Bilal Mirza
6
Terima kasih. Perlu dicatat bahwa pengaturan lingkungan eksekusi standar Eclipse (JRE yang berjalan di jalur build) adalah pengaturan yang terpisah . Saya telah menetapkan JRE tetapi tidak pada tingkat kepatuhan kompiler; ini memperbaikinya.
wchargin
Dan bagaimana Anda menarik kesimpulan dari pesan kesalahan bahwa ini adalah tempat yang tepat untuk mengatur opsi?
Alexander
Mungkin ini: stackoverflow.com/questions/7073485/… dapat membantu jika Anda menggunakan semut dan gerhana.
OuuGiii
Pertanyaannya adalah tentang Notepad ++ tetapi tidak Eclipse.
dapatkan dua
60

Jangan khawatir, saya menyelesaikannya.

Ini sebenarnya sederhana - Anda perlu menginstal KEDUA JRE / JDK dengan versi yang sama.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

Dan seterusnya.

ERJAN
sumber
29
java 7 dapat menangani 6 tanpa masalah juga.
damienix
@damienix Anda mungkin ingin menentukan bahwa Java 7 JRE dapat menangani kelas kompilasi Java 6 tanpa masalah, jika tidak, pernyataan Anda menyebabkan kebingungan.
Frontear
43

Kesalahan ini berarti Anda mencoba memuat file Java "class" yang dikompilasi dengan versi Java yang lebih baru daripada yang Anda instal.

Misalnya, .classfile Anda bisa dikompilasi untuk JDK 7, dan Anda mencoba menjalankannya dengan JDK 6.

Jadi solusinya adalah:

  • Tingkatkan runtime Java Anda atau
  • Kompilasi ulang kelas jika Anda memiliki sumbernya, menggunakan kompiler Java lokal Anda (jika Anda memilikinya).

    javac FileName.java

Untuk pengembang, ini bisa terjadi jika pengembang lain memeriksa dalam file .class, dan mereka memiliki versi java yang lebih baru daripada yang Anda miliki!

Taman Brad
sumber
22

Anda mencoba menjalankan program Anda dengan versi Java yang tidak mendukung versi kode yang dikompilasi. Jadi pada dasarnya Anda harus mengkompilasi kode Anda dengan versi yang lebih tinggi dan mencoba menjalankannya menggunakan versi yang lebih rendah.

Seperti yang Anda dapatkan

Unsupported major.minor version 51.0

dan versi 51.0 sesuai dengan J2SE 7 Anda mungkin telah mengkompilasi kode Anda di Java 7 dan mencoba menjalankannya menggunakan versi yang lebih rendah. Periksa java -versiontampilan apa . Seharusnya versi Java 7. Jika tidak, lakukan perubahan yang sesuai di PATH / JAVA_HOME. Atau Anda dapat mengkompilasi dengan versi yang sama dengan yang Anda coba jalankan kode. Jika konfigurasi membingungkan, Anda selalu dapat memberikan path absolut /home/user/jdk1.7.0_11/bin/javacdan /home/user/jdk1.7.0_11/bin/java.

Aniket Thakur
sumber
18

Saya memiliki situasi serupa di Mac, dan proses berikut ini berhasil untuk saya:

Di terminal, ketik

vi ~/.profile

Kemudian tambahkan baris ini dalam file, dan simpan

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

di mana versi adalah yang ada di komputer Anda, seperti 1.7.0_25.

Keluar dari editor, lalu ketik perintah berikut ini untuk membuatnya menjadi efektif

source ~/.profile 

Kemudian ketik java -versi untuk memeriksa hasilnya

java -version 

Apa itu .profilefile?

File profil adalah file tersembunyi. Ini adalah file opsional yang memberi tahu sistem yang memerintahkan untuk dijalankan ketika pengguna yang file profilnya masuk. Sebagai contoh, jika nama pengguna saya adalah bruno dan ada file .profile di / Users / bruno /, semua isinya akan dieksekusi selama prosedur masuk.

Sumber: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

Tony
sumber
16

Di menu Eclipse Window -> Preferences -> Java -> Compiler periksa juga "Configure Project Specific Settings".

Jika Anda masih memiliki kesalahan dengan versi Java yang sama: coba hapus folder build dari proyek Anda secara manual. Kemudian restart Eclipse.

Andreas L.
sumber
14

Anda dapat memiliki beberapa pustaka JAR yang dikompilasi di Java 7, dan Anda hanya memiliki Java 6 sebagai Java Runtime. Itu bisa terjadi dengan beberapa perpustakaan baru.

Rio
sumber
14

Masalah yang paling umum adalah kesalahan konfigurasi JAVA_HOMEvariabel Anda yang harus mengarah ke perpustakaan Java Development Kit yang tepat, jika Anda telah menginstal beberapa kali.

Untuk menemukan di mana folder Java SDK berada, jalankan perintah berikut:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian / Ubuntu

Untuk memeriksa java (openjdk) mana yang telah Anda instal, periksa melalui:

dpkg -l "openjdk*" | grep ^i

atau:

update-java-alternatives -l

Untuk mengubahnya, gunakan:

update-alternatives --config java

Awalan dengan sudojika diperlukan.

untuk memilih versi java alternatif.

Atau periksa mana yang tersedia untuk dipasang:

apt-cache search ^openjdk

Awalan dengan sudojika diperlukan.

Kemudian Anda dapat menginstal, misalnya:

apt-get install openjdk-7-jre

Awalan dengan sudojika diperlukan.

Fedora, Oracle Linux, Red Hat

Instal / tingkatkan paket yang sesuai melalui:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

The java-1.7.0-openjdkpaket berisi hanya Java Runtime Environment. Jika Anda ingin mengembangkan program Java maka instal java-1.7.0-openjdk-develpaket.

BSD

Ada paket OpenJDK 7 di koleksi FreeBSD Ports yang disebut openjdk7 yang mungkin perlu dikonfigurasi ulang.

Lihat: halaman wiki OpenJDK .

Windows

Cukup instal perpustakaan Java SE Development Kit yang sesuai dari situs Oracle atau instal

Jenkins

Jika Anda mengalami masalah ini dengan Jenkins, lihat:

Namun memilih versi Java yang tepat (lebih baru) dengan update-alternativesharus bekerja.

kenorb
sumber
Jawaban ini berfungsi untuk saya ketika mencoba menggunakan spark2-shell pada host setelah menambahkan layanan spark ke cluster dengan cloudera.
Mengubah
12

Saya telah menghadapi masalah yang sama ketika saya bekerja dengan skrip Semut untuk membangun aplikasi saya.

Saya menggunakan Eclipse untuk pengembangan aplikasi saya, dan saya mengubah versi kompiler dalam membangun properti proyek. Tetapi itu tidak berhasil untuk saya. Kemudian saya menemukan bahwa saya dapat menyediakan versi kompiler dalam skrip Ant.

Saya memodifikasi skrip Ant di bagian di mana ia mengkompilasi file Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Ini berhasil bagi saya untuk menyelesaikan masalah kecil utama yang tidak didukung.

Mandar Pandit
sumber
12

Ketika saya menginstal JDK 1.7, masalahnya terpecahkan.

pengguna3168034
sumber
12

Saya mendapat masalah yang sama dengan proyek yang ditulis dalam 1,7 dan mencoba untuk mengeksekusi dalam 1,6.

Solusi saya di Eclipse:

  • Klik kanan pada Properties Proyek Anda -> Java Build Path -> Libraries

  • Pilih Perpustakaan Sistem JRE Anda dan klik Edit di sebelah kanan, dan pilih target JRE.

  • Sekarang pergi ke Java Compiler di sebelah kiri, dan ubah tingkat kepatuhan Compiler ke target Anda.

Itu berhasil bagi saya.

Ben
sumber
11

Seperti yang dijawab oleh beberapa orang di tempat lain, program Java dijalankan pada versi Jawa yang lebih lama daripada yang dikompilasi untuknya. Itu harus "dikompilasi silang" untuk kompatibilitas ke belakang. Dengan kata lain, ada ketidakcocokan antara sumber dan target versi Java.

Mengubah opsi dalam menu Eclipse tidak menjawab poster asli, yang mengatakan dia tidak menggunakan Eclipse. Pada OpenJDK javac versi 1.7, Anda dapat melakukan crosscompile untuk 1.6 jika Anda menggunakan parameter -sourcedan -target, ditambah memberikan rt.jar -file dari versi target (yaitu, yang lebih tua) pada waktu kompilasi. Jika Anda benar-benar menginstal 1.6 JRE, Anda dapat mengarahkan ke instalasinya (misalnya, /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar di Ubuntu, / usr / jdk / jdk1. 6.0_60 / jre / lib / rt.jar di SunOS rupanya. Maaf, saya tidak tahu di mana itu pada sistem Windows). Seperti itu:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

Sepertinya Anda cukup mengunduh rt.jar dari Internet, dan arahkan ke sana. Ini tidak terlalu elegan:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
Mace Ojala
sumber
10

Berdasarkan ini...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

Di Eclipse, klik kanan pada proyek di paket explorer:

Bangun Jalur -> Configure Build Path

Dibawah:

Java Build Path -> Libraries -> Add Library -> JRE System Library -> Installed JREs -> Search .

Tambahkan JRE yang diperlukan dengan memilih perpustakaan di daftar yang tersedia setelah pencarian selesai.

Adit Ya
sumber
10
  • Jika Anda menggunakan Maven, atur tingkat kompilasi Java Anda. Buka baris perintah dan tulis java -versionuntuk tingkat kompilasi Anda:

    Masukkan deskripsi gambar di sini

  • Jika Anda menggunakan IntelliJ IDEA, pilih proyek → FilePengaturanBuild Execution DeploymentCompilerJava Compiler . Kemudian ubah kode byte menjadi 1,7 seperti gambar ini:

    Masukkan deskripsi gambar di sini

ethemsulan
sumber
Saya perlu melakukan instalasi bersih maven juga setelah mengubah pom.
Joe Borysko
10

Jika Anda menghadapi masalah ini saat menggunakan Maven , Anda dapat mengkompilasi kode Anda menggunakan plug-in Maven Compiler .

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

UPDATE: atur sourcedan targetke 1.8, jika Anda menggunakan JDK 8.

Thamme Gowda
sumber
cuplikan tentang cara menggunakan plugin untuk cross-compilte akan sangat baik daripada mengunjungi / membuka tautan
coding_idiot
8

Saya memiliki pesan kesalahan yang sama ketika menjalankan Ant dari Eclipse, tetapi solusi lain yang disebutkan di sini tidak menyelesaikan masalah saya. Yang lucu adalah bahwa menjalankan Ant dari baris perintah Windows berjalan dengan baik, jadi itu harus menjadi masalah konfigurasi dalam Eclipse.

Ternyata di bawah Eclipse Anda dapat menentukan lingkungan yang seharusnya dijalankan dengan Ant dan ini ditetapkan sebagai JRE, bukan JDK.

  • Pergi ke: Jalankan -> Alat Eksternal -> Konfigurasi Alat Eksternal ...
  • Pilih Ant build.xml untuk proyek Anda (jika Anda memiliki banyak proyek)
  • Aktifkan Tab 'JRE'
  • Di sini dipilih 'Pisahkan JRE: jre6'. Ketika saya mengubah ini menjadi JDK dari seri 1.6 atau 1.7, kesalahan telah hilang.
ckielstra
sumber
8

Bagaimana saya memperbaikinya?

Kesalahan ini berarti bahwa JRE yang digunakan untuk mengeksekusi kode kelas Anda tidak mengenali versi Java yang digunakan. Biasanya karena versi Java yang menghasilkan file kelas Anda (mis. Kompilasi) lebih baru.

Untuk memperbaikinya, Anda bisa

a) Kompilasi sumber Java Anda dengan versi yang sama, atau lebih lama, dari kompiler Java yang akan digunakan untuk menjalankannya. yaitu menginstal JDK yang sesuai.

b) Kompilasi sumber Java Anda dengan versi Java compiler yang lebih baru tetapi dalam mode kompatibilitas. yaitu menggunakan -targetparameter.

c) Jalankan kelas kompilasi Anda di JRE yang sama, atau versi yang lebih baru, seperti yang digunakan JDK untuk mengkompilasi kelas.

Anda dapat memeriksa versi yang saat ini Anda gunakan javac -versionuntuk kompiler, dan java -versionuntuk runtime.

Haruskah saya menginstal JDK, dan mengatur variabel PATH saya ke JDK alih-alih JRE?

Untuk kompilasi, tentu saja, instal dan konfigurasikan JDK spesifik yang Anda inginkan.

Untuk runtime, Anda dapat menggunakan salah satu yang datang dengan JDK atau JRE mandiri, tetapi terlepas dari itu, pastikan bahwa Anda telah menginstal versi yang benar dan bahwa Anda telah mengkonfigurasi PATH Anda sehingga tidak ada kejutan.

Apa perbedaan antara variabel PATH di JRE atau JDK?

Variabel lingkungan PATH memberi tahu shell perintah tempat mencari perintah yang Anda ketikkan. Saat Anda mengetik java, command shell interpreter akan memeriksa semua lokasi yang ditentukan dalam PATHvariabel, dari kiri ke kanan, untuk menemukan javaruntime yang sesuai yang dapat dieksekusi untuk dijalankan. Jika Anda memiliki beberapa versi Java yang diinstal - yaitu Anda memilikijava executable di beberapa lokasi yang ditentukan dalam variabel PATH, maka yang pertama kali ditemui ketika bergerak dari kiri ke kanan adalah yang dieksekusi.

Perintah compiler adalah javacdan hanya dilengkapi dengan JDK. Perintah runtime adalah javadan datang dengan JDK dan di JRE.

Kemungkinan Anda memiliki satu versi (51.0 = Java 7) javacdiinstal, dan Anda juga memiliki versi yang sama javadiinstal, tetapi bahwa versi sebelumnya yang lain javamuncul sebelumnya di PATH dan sedang dipanggil bukan yang Anda harapkan .

Vihung
sumber
7

Anda telah menggunakan versi JDK yang lebih tinggi untuk mengkompilasi dan mencoba menjalankan dari versi JDK / JRE yang lebih rendah .

Untuk memeriksanya, lihat informasi versi:

javac -version

java -version

Mereka akan berbeda dan javac akan memiliki nomor versi yang lebih tinggi.

Untuk menyiasatinya, jalankan menggunakan java dari versi JDK atau jika Anda memiliki JRE / JDK yang lebih baru yang juga berfungsi.

which javacakan memberi tahu Anda lokasi, misalnya /usr/bin/javac,. Jalankan langsung menggunakan /usr/bin/java <program>.

ATAU Anda dapat mengatur variabel lingkungan sebagai solusi permanen.

L Lawliet
sumber
6

Punya masalah ini ketika saya kembali ke Java 6 dan mencoba menjalankan kelas yang sebelumnya dikompilasi dengan Java 7. Apa yang berhasil bagi saya adalah Preferensi> java> compiler -> atur level kepatuhan ke 1.6 dan yang terpenting "konfigurasikan pengaturan proyek" ..

pengguna3534268
sumber
6

Hari ini, pesan kesalahan ini muncul di Tomcat 7 kami di Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 Apr 2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Pengecualian mulai filter struts2
java.lang.UnsupportedClassVersionError: controller / ReqAccept: Versi major.minor tidak didukung 51.0 (tidak dapat memuat pengontrol kelas. ReqAccept)

The Struts aplikasi dikompilasi dengan Java 7.

Ternyata, seseorang menggunakan "service tomcat [stop / start]" untuk me-restart Tomcat 7,

$ ps-id | grep java
tomcat7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin / java -versi
java versi "1.6.0_27"

Yang menyebabkan kesalahan "Versi major.minor 51.0" tidak didukung.

Ketika kami menggunakan "/etc/init.d/tomcat7 [stop / start]" untuk memulai ulang Tomcat 7, masalahnya telah terpecahkan.

$ ps-id | grep java
tomcat7 31886 1 80 20:24? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -versi
versi java "1.7.0_15"

oraclesoon
sumber
6

Saya menyelesaikannya. Saya berlari:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

Kesalahan itu menyesatkan Unsupported major.minor version 51.0,. Ini memberi kesan bahwa versi 51 (Java 7) tidak didukung. Dan kita harus menggunakan Java 6.

Kesalahan seharusnya:

Versi Java saat ini, 50, tidak didukung. Gunakan Java versi 7 (51: 0 dan lebih tinggi)

Siddharth
sumber
6

File Java Anda dikompilasi dengan versi yang berbeda (versi kompiler yang lebih tinggi) dari versi (versi runtime yang lebih rendah) yang Anda coba jalankan dengannya.

Ini adalah pemahaman dasar bahwa kelas yang dikompilasi dengan versi yang lebih rendah diharapkan untuk berjalan di versi yang lebih tinggi kemudian. Tetapi sebaliknya (dikompilasi dengan versi kompiler yang lebih tinggi dan mencoba menjalankannya dengan versi runtime yang lebih rendah) kadang-kadang sangat tidak mungkin.

Karenanya Anda diperlihatkan kesalahan ini, ketika mencoba menjalankan program Anda. Versi major.minor xx yang tidak didukung

T: Saya telah membuat aplikasi di Java 7, tetapi ketika pengguna saya mencoba menjalankannya, mereka mendapatkan kesalahan major.minor versi 51.0 yang tidak didukung. Apa artinya ini dan apa yang bisa saya lakukan?

A: Jika Anda mengkompilasi aplikasi menggunakan javac di Java 7, classfiles yang dihasilkan akan memiliki nomor versi 51.0. Versi Java sebelum 7 tidak mengenali nomor ini, jadi pengguna Anda harus memutakhirkan ke Java 7 sebelum menjalankan aplikasi Anda. Jika Anda tidak menggunakan Java 7 API, Anda dapat mencoba mengkompilasi aplikasi Anda menggunakan javac -target 1.6 untuk membuat classfile yang kompatibel dengan 1.6. Jika aplikasi Anda digunakan menggunakan webstart, Anda dapat menentukan versi minimum yang diperlukan. Untuk informasi lebih lanjut, lihat dokumen di Java Web Start dan JNLP di sini. Masalah ini akan hilang begitu kami memicu pemutakhiran otomatis ke Java 7 untuk pengguna akhir yang saat ini memiliki Java 6 di desktop mereka. Batas waktu untuk ini belum ditentukan, kami ingin memberi pengembang waktu untuk menyelesaikan masalah apa pun antara kode mereka dan JDK 7 terlebih dahulu.

(Sumber: oracle.com .)

Manohar
sumber
5

Oh Mac OS XI dapat mengatasi masalah ini dengan mengatur variabel JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
TomTom
sumber
4

Pertama mari kita buat beberapa dasar-dasar yang benar ...

JRE adalah komponen di NetBeans / Eclipse / standalone yang akan memberi Anda perpustakaan, JVM, plugin Java & Java web start. Perhatikan bahwa itu tidak menyediakan compliers atau debugger.

JDK adalah superset dari JRE bersama dengan compliers dan debugger.

Jadi ketika Anda memiliki pustaka default sebagai JRE alih-alih JDK, Anda akan bersenang-senang mengimpor barang, tetapi itu tidak dapat dikompilasi.

Sebagai gantinya, setel path Anda ke JDK (saya menggunakan NetBeans, dan saya mengaturnya menggunakan netbeans.conf di netbeans / etc / netbeans.conf dan ubah path).

Creative_Cimmons
sumber
3

Saya mempunyai masalah di mana saya harus menjalankan kompilasi Maven pada proyek saya dari baris perintah untuk menjalankan tes unit saya; jika saya membuat perubahan ke kelas tes dan membiarkan Eclipse secara otomatis mengkompilasi ulang, maka saya mendapat kesalahan "Tidak didukung major.minor versi 51.0".

Saya memiliki kedua JDK6 dan JDK7 yang diinstal, tetapi semua pengaturan JRE saya menunjuk ke 1,6, baik di pom dan dari halaman properti proyek di Eclipse. Tidak ada jumlah Proyek Pembaruan Maven dan / atau penyegaran yang menyelesaikan masalah ini.

Akhirnya saya mencoba menutup proyek dan membukanya kembali, dan ini sepertinya memperbaikinya! HTH

Matthew Wise
sumber
3

Anda telah mengkompilasi kelas Java Anda dengan JDK 7 dan Anda mencoba menjalankan kelas yang sama di JDK 6.

Sagar Varpe
sumber
3
  • Instal JDK 7.0.55 dan atur Java untuk Eclipse untuk JDK 7.0.55.
  • Bangun proyek dengan JDK 7.0.55 dengan mengkonfigurasi pada build path JDK 7.0.55.
  • Atur kompiler di Eclipse untuk JDK 7.0.55 dengan menu Windows -> Preferences -> Java -> Compiler - pilih 1.7.
siddmuk2005
sumber
3

Jawabannya untuk masalah:

Pengecualian di utas "main" java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: major.minor versi tidak didukung 52.

Saya mengalami masalah yang sama. Bagi mereka yang mengalami masalah ini dalam contoh AWS ec2, dan entah bagaimana dialihkan ke pertanyaan ini. Saya menjawab untuk itu, dan ingin membagikan bagaimana saya melakukannya. Saya mengalami masalah karena instance Amazon EC2 menjalankan java versi 1.7 dan mungkin proyek saya tidak kompatibel dengan itu karena saya menggunakan Maven dan itu semacam prakonfigurasi untuk java 1.8. Jadi saya menginstal versi baru java:

sudo yum -y install java-1.8.0

Dan kemudian langkah penting adalah menghapus versi yang lebih lama:

sudo yum remove java-1.7.0-openjdk

Ingatlah untuk menghapusnya setelah menginstal versi baru, jika tidak maka akan terus menggunakan versi lama yang sama dan saya harap ini menyelesaikan masalah Anda, yang memang dalam kasus saya.

Siddharth Choudhary
sumber