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 .../bin
direktori.
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.
- Bagaimana saya memperbaikinya?
- Haruskah saya menginstal JDK, dan mengatur variabel path saya ke JDK alih-alih JRE?
- Apa perbedaan antara
PATH
variabel dalam JRE atau JDK?
Jawaban:
Nomor versi yang ditampilkan menjelaskan versi JRE yang kompatibel dengan file kelas.
Angka-angka utama yang dilaporkan adalah:
(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:
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 .
sumber
java.lang.UnsupportedClassVersionError
terjadi karena JDK lebih tinggi selama waktu kompilasi dan JDK lebih rendah selama runtime.sumber
/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
) ke versi yang digunakan untuk kompilasi dengan javac menyelesaikannyasudo update-alternatives --config java
untuk melakukannya.Di Eclipse, saya hanya pergi ke menu perintah Window -> Preferences -> Java -> Compiler dan kemudian mengatur "Level kepatuhan kompiler" menjadi 1,6.
sumber
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.
sumber
Kesalahan ini berarti Anda mencoba memuat file Java "class" yang dikompilasi dengan versi Java yang lebih baru daripada yang Anda instal.
Misalnya,
.class
file Anda bisa dikompilasi untuk JDK 7, dan Anda mencoba menjalankannya dengan JDK 6.Jadi solusinya adalah:
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!
sumber
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
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 -version
tampilan 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/javac
dan/home/user/jdk1.7.0_11/bin/java
.sumber
Saya memiliki situasi serupa di Mac, dan proses berikut ini berhasil untuk saya:
Di terminal, ketik
Kemudian tambahkan baris ini dalam file, dan simpan
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
Kemudian ketik java -versi untuk memeriksa hasilnya
Apa itu
.profile
file?Sumber: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515
sumber
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.
sumber
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.
sumber
Masalah yang paling umum adalah kesalahan konfigurasi
JAVA_HOME
variabel 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:
Debian / Ubuntu
Untuk memeriksa java (openjdk) mana yang telah Anda instal, periksa melalui:
atau:
Untuk mengubahnya, gunakan:
Awalan dengan
sudo
jika diperlukan.untuk memilih versi java alternatif.
Atau periksa mana yang tersedia untuk dipasang:
Awalan dengan
sudo
jika diperlukan.Kemudian Anda dapat menginstal, misalnya:
Awalan dengan
sudo
jika diperlukan.Fedora, Oracle Linux, Red Hat
Instal / tingkatkan paket yang sesuai melalui:
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-alternatives
harus bekerja.sumber
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.
Ini berhasil bagi saya untuk menyelesaikan masalah kecil utama yang tidak didukung.
sumber
Ketika saya menginstal JDK 1.7, masalahnya terpecahkan.
sumber
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.
sumber
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
-source
dan-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:Sepertinya Anda cukup mengunduh rt.jar dari Internet, dan arahkan ke sana. Ini tidak terlalu elegan:
sumber
Berdasarkan ini...
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.
sumber
Jika Anda menggunakan Maven, atur tingkat kompilasi Java Anda. Buka baris perintah dan tulis
java -version
untuk tingkat kompilasi Anda:Jika Anda menggunakan IntelliJ IDEA, pilih proyek → File → Pengaturan → Build Execution Deployment → Compiler → Java Compiler . Kemudian ubah kode byte menjadi 1,7 seperti gambar ini:
sumber
Jika Anda menghadapi masalah ini saat menggunakan Maven , Anda dapat mengkompilasi kode Anda menggunakan plug-in Maven Compiler .
UPDATE: atur
source
dantarget
ke1.8
, jika Anda menggunakan JDK 8.sumber
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.
sumber
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
-target
parameter.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 -version
untuk kompiler, danjava -version
untuk runtime.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.
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 dalamPATH
variabel, dari kiri ke kanan, untuk menemukanjava
runtime 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
javac
dan hanya dilengkapi dengan JDK. Perintah runtime adalahjava
dan datang dengan JDK dan di JRE.Kemungkinan Anda memiliki satu versi (51.0 = Java 7)
javac
diinstal, dan Anda juga memiliki versi yang samajava
diinstal, tetapi bahwa versi sebelumnya yang lainjava
muncul sebelumnya di PATH dan sedang dipanggil bukan yang Anda harapkan .sumber
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:
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 javac
akan memberi tahu Anda lokasi, misalnya/usr/bin/javac
,. Jalankan langsung menggunakan/usr/bin/java <program>
.ATAU Anda dapat mengatur variabel lingkungan sebagai solusi permanen.
sumber
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" ..
sumber
Hari ini, pesan kesalahan ini muncul di Tomcat 7 kami di Ubuntu 12.04.2 LTS (Precise Pangolin):
The Struts aplikasi dikompilasi dengan Java 7.
Ternyata, seseorang menggunakan "service tomcat [stop / start]" untuk me-restart Tomcat 7,
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.
sumber
Saya menyelesaikannya. Saya berlari:
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:
sumber
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
(Sumber: oracle.com .)
sumber
Oh Mac OS XI dapat mengatasi masalah ini dengan mengatur variabel JAVA_HOME:
sumber
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).
sumber
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
sumber
Anda telah mengkompilasi kelas Java Anda dengan JDK 7 dan Anda mencoba menjalankan kelas yang sama di JDK 6.
sumber
sumber
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:
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.
sumber