Saya mencoba untuk menggunakan Notepad++ seperti yang saya semua-dalam-satu alat edit, run, compile, dll.
Saya memiliki JRE diinstal, dan saya memiliki setup my variabel path untuk .../bin
direktori.
Ketika saya berjalan saya "Hello world" di Notepad++, saya mendapatkan 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 Jawa mungkin menjadi tua atau terlalu baru.
PATH
variabel dalam JRE atau JDK?Nomor versi ditunjukkan menjelaskan versi JRE kelas file yang kompatibel dengan.
Laporan utama nomor ini adalah:
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 dan memperbaiki masalah yang sebenarnya anda harus mencoba untuk menjalankan kode Java dengan versi yang lebih baru dari Java JRE atau menentukan target parameter untuk Java compiler untuk menginstruksikan compiler untuk membuat kode yang kompatibel dengan Java versi sebelumnya.
Misalnya, dalam rangka untuk menghasilkan file kelas yang kompatibel dengan Java 1.4, gunakan baris perintah berikut:
javac -target 1.4 HelloWorld.java
Dengan versi yang lebih baru dari Java compiler anda akan mendapatkan peringatan tentang bootstrap kelas jalan tidak diatur. Informasi lebih lanjut tentang kesalahan ini tersedia dalam posting blog New javac peringatan untuk pengaturan yang lebih tua sumber tanpa bootclasspath.
Kesalahan ini berarti anda're mencoba untuk memuat Jawa "kelas" file yang sudah dikompile dengan versi yang lebih baru dari Java dari yang anda telah diinstal.
Misalnya, anda .kelas
file yang telah disusun untuk JDK 7, dan anda're berusaha untuk menjalankannya dengan JDK 6.
Jadi solusinya adalah untuk:
javac FileName.java
Untuk pengembang, hal ini dapat terjadi jika pengembang lain pemeriksaan dalam .file kelas, dan mereka've punya versi yang lebih baru dari java dari yang anda miliki!
Anda mencoba untuk menjalankan program anda dengan versi Java yang tidak mendukung versi di mana kode dikompilasi. Jadi pada dasarnya anda harus memiliki dikompilasi kode anda dengan versi yang lebih tinggi dan mencoba untuk menjalankannya menggunakan versi yang lebih rendah.
Sebagai anda mendapatkan
Unsupported major.minor version 51.0
dan versi 51.0 sesuai dengan J2SE 7 anda memiliki kemungkinan besar disusun kode dalam Java 7 dan mencoba untuk menjalankannya menggunakan versi yang lebih rendah. Periksa apa yang jawa -versi
menampilkan. Itu harus Java versi 7. Jika tidak membuat perubahan yang sesuai dalam PATH/JAVA_HOME. Atau anda dapat mengkompilasi dengan versi yang sama anda mencoba untuk menjalankan kode. Jika konfigurasi yang membingungkan anda selalu dapat memberikan absolute path /home/user/jdk1.7.0_11/bin/javac
dan /home/user/jdk1.7.0_11/bin/java
.
Saya punya situasi yang sama pada Mac, dan berikut proses bekerja untuk saya:
Di terminal, ketik
vi ~/.profile
Kemudian tambahkan baris ini di file, dan menyimpan
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
mana versi yang ada di komputer anda, seperti 1.7.0_25
.
Keluar dari editor, kemudian ketik perintah berikut ini membuatnya menjadi efektif
source ~/.profile
Kemudian ketik java -version untuk memeriksa hasil
java -version
Apa .profil
file?
.profil adalah file tersembunyi. Ini adalah opsional file yang memberitahu sistem yang perintah untuk menjalankan ketika pengguna yang profilnya file log in. Misalnya, jika username saya adalah bruno dan ada .profil file di /Pengguna/bruno/, semua isinya akan dilaksanakan selama log-in prosedur.
Di Eclipse's menu Jendela -> Preferensi -> Jawa -> Compiler lihat juga "Mengkonfigurasi Proyek Tertentu Pengaturan".
Jika anda masih memiliki kesalahan yang sama Java version: mencoba untuk menghapus folder build proyek anda secara manual. Kemudian restart Eclipse.
Masalah yang paling umum adalah kesalahan konfigurasi anda JAVA_HOME
variabel yang harus arahkan ke kanan Java Development Kit perpustakaan, jika anda've beberapa diinstal.
Untuk menemukan di mana SDK Java folder berada, jalankan perintah berikut:
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
Untuk memeriksa jawa (openjdk) anda've dipasang, periksa melalui:
dpkg -l "openjdk*" | grep ^i
atau:
update-java-alternatives -l
Untuk mengubahnya, gunakan:
update-alternatives --config java
Awalan dengan sudo
jika diperlukan.
untuk memilih alternatif yang versi java.
Atau cek yang tersedia untuk menginstal:
apt-cache search ^openjdk
Awalan dengan sudo
jika diperlukan.
Kemudian anda dapat menginstal, misalnya:
apt-get install openjdk-7-jre
Awalan dengan sudo
jika diperlukan.
Install/upgrade paket yang sesuai melalui:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
jawa-1.7.0-openjdk
paket hanya berisi Java Runtime Environment. Jika anda ingin mengembangkan program Java kemudian instaljawa-1.7.0-openjdk-devel
paket.
Ada OpenJDK 7 paket di FreeBSD Ports collection disebut openjdk7 yang mungkin perlu dikonfigurasi ulang.
Lihat: OpenJDK halaman wiki.
Hanya menginstal tepat Java SE Development Kit perpustakaan dari Oracle situs atau menginstal
Jika anda'kembali mengalami masalah ini dengan Jenkins, lihat:
Namun memilih versi yang benar dari Jawa (baru) dengan update-alternatives
harus bekerja.
Saya punya masalah yang sama dengan proyek yang tertulis di 1.7 dan mencoba untuk menjalankan di 1.6.
Solusi saya di Eclipse:
Klik kanan pada Proyek anda Sifat -> Java Build Path -> Perpustakaan
Pilih JRE System Library dan klik Edit di sebelah kanan, dan memilih target JRE.
Sekarang pergi ke Compiler Java di sebelah kiri, dan mengubah Compiler tingkat kepatuhan untuk target anda.
Yang bekerja untuk saya.
Saya telah menghadapi masalah yang sama ketika saya bekerja dengan Ant script untuk membangun aplikasi saya.
Saya menggunakan Eclipse untuk pengembangan aplikasi, dan saya mengubah versi compiler dalam membangun sifat proyek. Tapi itu tidak't bekerja untuk saya. Kemudian saya menemukan bahwa saya dapat memberikan compiler versi di Ant script.
Saya memodifikasi script Ant di bagian mana itu compile file Java.
<target name="build-java" depends="prepare-build">
<echo message="Compiling java files"/>
<javac ....
target="1.5"...
</javac>
</target>
Ini bekerja untuk saya untuk menyelesaikan didukung utama masalah kecil.
Sebagai dijawab di tempat lain oleh beberapa orang, program Java yang berjalan pada versi yang lebih tua dari Jawa dari satu itu disusun untuk. Perlu "crosscompiled" untuk mundur kompatibilitas. Dengan kata lain, ada ketidaksesuaian antara sumber dan target Jawa versi.
Mengubah opsi di Eclipse menu don't menjawab poster asli, yang mengatakan bahwa dia/dia tidak menggunakan Eclipse. Pada OpenJDK javac versi 1.7, anda dapat crosscompile untuk 1,6 jika anda menggunakan parameter source
dan sasaran
, plus memberikan rt.jar -file dari versi target (yang lebih tua) pada waktu kompilasi. Jika anda benar-benar menginstal JRE 1.6, anda dapat arahkan ke instalasi (misalnya, /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar pada Ubuntu, /usr/jdk/jdk1.6.0_60/jre/lib/rt.jar pada SunOS rupanya. Maaf, saya don't tahu di mana itu pada sistem Windows). Seperti:
javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java
Sepertinya anda hanya dapat men-download rt.jar dari Internet, dan titik itu. Ini tidak terlalu elegan meskipun:
javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
Jika anda're 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: set source
dan sasaran
untuk 1.8
, jika anda menggunakan JDK 8.
jawa -versi
untuk mengkompilasi tingkat: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
Pada Eclipse, klik kanan pada project di package explorer:
Membangun Jalan -> Configure Build Path
Bawah:
Java Build Path -> Perpustakaan -> Tambahkan Library -> JRE System Library -> Terpasang Jre -> *Pencarian***.
Tambahkan dibutuhkan JRE dengan memilih perpustakaan dalam daftar yang tersedia setelah pencarian selesai.
Saya mendapat pesan kesalahan yang sama ketika menjalankan Semut dari Eclipse, tapi solusi lain yang disebutkan di sini tidak't memecahkan masalah saya. Hal yang lucu adalah bahwa Semut berjalan dari baris perintah Windows berjalan baik, sehingga telah menjadi masalah konfigurasi di dalam Eclipse.
Ternyata bahwa di bawah Gerhana anda dapat menentukan lingkungan bahwa Semut harus berjalan dengan dan ini ditetapkan sebagai JRE bukan JDK.
Bagaimana cara memperbaikinya?
Kesalahan ini berarti bahwa JRE yang digunakan untuk mengeksekusi kode kelas tidak mengenali versi Java yang digunakan. Biasanya karena versi Java yang dihasilkan file kelas anda (yaitu disusun itu) lebih baru.
Untuk memperbaikinya, anda dapat
a) Kompilasi Java anda dengan sumber yang sama, atau lebih tua, versi Java compiler seperti yang akan digunakan untuk menjalankan itu. yaitu install sesuai JDK.
b) Kompilasi Java anda sumber dengan versi yang lebih baru dari Java compiler tapi dalam modus kompatibilitas. yaitu menggunakan target
parameter.
c) Menjalankan disusun dalam kelas-kelas dalam JRE yang sama, atau yang lebih baru, versi JDK yang digunakan untuk menyusun kelas-kelas.
Anda dapat memeriksa versi yang sedang anda gunakan dengan
javac -version
untuk compiler, dan java -version
untuk runtime.
saya Harus menginstal JDK, dan setup my variabel PATH JDK bukan JRE?
Untuk kompilasi, tentu saja, menginstal dan mengkonfigurasi tertentu JDK yang anda inginkan.
Untuk runtime, anda dapat menggunakan salah satu yang datang dengan JDK atau mandiri JRE, tapi terlepas dari itu, pastikan bahwa anda telah menginstal kanan versi dan bahwa anda telah dikonfigurasi JALAN anda seperti yang ada tidak ada kejutan.
Apa perbedaan antara variabel PATH di JRE atau JDK?
Variabel lingkungan PATH menceritakan perintah shell di mana untuk mencari perintah yang anda ketik. Ketika anda mengetik jawa
, perintah shell interpreter akan melihat melalui semua lokasi yang ditentukan dalam PATH
variabel, dari kiri ke kanan, untuk menemukan yang tepat jawa
runtime eksekusi untuk dijalankan. Jika anda memiliki beberapa versi Java yang terinstal - yaitu, anda memiliki jawa
yang dapat dijalankan di beberapa lokasi yang ditentukan dalam variabel PATH, maka yang pertama ditemui ketika bergerak dari kiri ke kanan akan menjadi salah satu yang dieksekusi.
Compiler perintah javac
dan hanya dilengkapi dengan JDK. Runtime perintah jawa
dan dilengkapi dengan JDK dan JRE.
Ada kemungkinan bahwa anda memiliki satu versi (51.0 Jawa = 7) dari javac
diinstal, dan anda juga memiliki versi yang sama dari jawa
dipasang, tapi yang lain versi sebelumnya dari jawa
muncul sebelumnya di JALAN dan sedang dipanggil bukan salah satu yang anda harapkan.
Anda telah menggunakan versi yang lebih tinggi dari JDK untuk mengkompilasi dan mencoba untuk lari dari versi yang lebih rendah dari JDK/JRE.
Untuk memeriksa ini, melihat informasi versi:
javac -version
java -version
Mereka akan berbeda dan javac akan memiliki versi yang lebih tinggi nomor.
Untuk menyiasati hal ini, berjalan menggunakan java dari JDK versi atau jika anda memiliki baru JRE/JDK yang akan bekerja dengan baik.
yang javac
akan memberitahu anda lokasi, misalnya, /usr/bin/javac
. Hanya menjalankan secara langsung menggunakan /usr/bin/java <program>
.
ATAU anda dapat mengatur variabel lingkungan sebagai solusi permanen.