Di Windows, JAVA_HOME
harus mengarah ke folder instalasi JDK (sehingga JAVA_HOME/bin
berisi semua executable dan JAVA_HOME/libs
berisi semua jar
pustaka default ).
Jika saya mengunduh bundel JDK Sun dan menginstalnya di Linux, prosedurnya sama.
Namun, saya perlu menggunakan paket OpenJDK default Kubuntu. Masalahnya adalah semua executable ditempatkan di /usr/bin
. Tapi toples itu ditempatkan /usr/share/java
. Karena mereka tidak berada dalam JAVA_HOME
folder yang sama, saya mengalami masalah dengan Grails dan mungkin akan ada masalah dengan aplikasi lain yang mengharapkan struktur Java standar.
Jika saya menggunakan:
JAVA_HOME=/usr
Semua aplikasi dan skrip yang ingin menggunakan Java apa pun yang dapat dieksekusi dapat menggunakan prosedur standar
call $JAVA_HOME/bin/executable
. Namun, sejak guci berada di tempat yang berbeda, mereka tidak selalu ditemukan (contoh: di Grails saya mendapatkanClassDefNotFound
untuknative2ascii
).Di sisi lain, jika saya menggunakan:
JAVA_HOME=/usr/share/java
Tak satu pun dari executable Java (
java
,javac
, dll) dapat ditemukan.
Jadi, bagaimana cara yang benar untuk menangani JAVA_HOME
variabel di Linux berbasis Debian?
Terima kasih atas bantuan Anda, Luis
sumber
Jika Anda menggunakan alternatif untuk mengelola beberapa versi java, Anda dapat mengaturnya
JAVA_HOME
berdasarkan java (atau javac) yang terhubung seperti ini:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
sumber
/usr/bin/java
mengarah ke script (/usr/libexec/eselect-java/run-java-tool.bash
). tetap saja, itu pendekatan yang bagus. satu-satunya hal yang saya ubah adalah menggunakan substitusi bawaan Bash untuk menghindari pemijahansed
, misalnya:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
kejava
karena tidak semua orang memiliki JDK terinstal; hanya JREInstalasi standar Ubuntu tampaknya memasukkan berbagai versi Java
/usr/lib/jvm
. Thejavac
, java Anda temukan di jalan Anda akan softlink ini.Tidak ada masalah dengan menginstal versi Java Anda sendiri di mana pun Anda suka, selama Anda menyetel
JAVA_HOME
variabel lingkungan dan memastikan Java barubin
di jalur Anda.Cara sederhana untuk melakukannya adalah dengan memiliki Java home sebagai softlink, sehingga jika Anda ingin meningkatkan atau mengganti versi, Anda hanya perlu mengubah direktori yang dituju - misalnya:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
sumber
Saya biasanya tidak memiliki variabel lingkungan JAVA_HOME. Java dapat mengaturnya sendiri. Di dalam properti java java.home system harus tersedia.
sumber
Coba atur juga variabel JAVA_LIB.
sumber
Jika Anda memiliki masalah dengan file JAR yang tidak ditemukan, saya juga akan memastikan CLASSPATH Anda diatur untuk menyertakan lokasi file tersebut. Namun saya menemukan bahwa CLASSPATH sering kali perlu diatur secara berbeda untuk program yang berbeda dan seringkali berakhir dengan sesuatu yang diatur secara unik untuk program individu.
sumber
Jawaban terbaru yang akan menyelesaikan masalah Anda dan juga cara umum yang baik untuk menginstal Oracle Java 7 di Ubuntu dapat ditemukan di sini: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
sumber
Saya telah menemukan masalah serupa dengan paket openjdk-6-jre dan openjdk-6-jre-headless di Ubuntu.
Masalah saya diselesaikan dengan membersihkan paket openjdk-6-jre dan openjdk-6-jre-headless dan menginstal ulang. Alternatif hanya diperbarui pada penginstalan baru paket openjdk-6-jre dan openjdk-6-jre-headless.
Di bawah ini adalah contoh pemasangan setelah pembersihan:
aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists aptitude install --without-recommends openjdk-6-jre # Installing without some extras Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62267 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... Setting up tzdata-java (2012e-0ubuntu0.10.04) ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/java to provide /usr/bin/java (java) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode. Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode. ...
Anda dapat melihat di atas yang
update-alternatives
dijalankan untuk mengatur tautan untuk berbagai binari Java.Setelah pemasangan ini, ada juga tautan masuk
/usr/bin
, tautan masuk/etc/alternatives
, dan file untuk setiap biner masuk/var/lib/dpkg/alternatives
.ls -l /usr/bin/java /etc/alternatives/java /var/lib/dpkg/alternatives/java lrwxrwxrwx 1 root root 40 2013-01-16 14:44 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java lrwxrwxrwx 1 root root 22 2013-01-16 14:44 /usr/bin/java -> /etc/alternatives/java -rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/java
Mari kontraskan ini dengan menginstal tanpa menghapus.
aptitude remove openjdk-6-jre aptitude install --without-recommends openjdk-6-jre Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62293 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... ...
Seperti yang Anda lihat,
update-alternatives
tidak dipicu.Setelah pemasangan ini, tidak ada file untuk binari Java di
/var/lib/dpkg/alternatives
, tidak ada tautan masuk/etc/alternatives
, dan tidak ada tautan masuk/usr/bin
.Penghapusan file
/var/lib/dpkg/alternatives
juga rusakupdate-java-alternatives
.sumber
Ubuntu 12.04 ini berfungsi ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
sumber
Sebagai pembaruan untuk pengguna fedora, alternatif mengatur direktori java saat ini ke / usr / java / default
jadi Anda harus menyetel JAVA_HOME Anda ke / usr / java / default agar selalu memiliki alternatif pilihan saat ini di jalur kelas Anda
HTH!
sumber
Saya selalu cenderung untuk mengatur JAVA_HOME sesuai dengan
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
Dengan cara ini, kedua alternatif menunjuk ke lokasi yang sama
sumber
Sejauh yang saya ingat, saya menggunakan skrip update-java-alternatif daripada update-alternatif. Dan itu mengatur JAVA_HOME untuk saya dengan benar.
sumber
Silakan lihat apa yang dilakukan oleh perintah update-alternatif (ini orang yang baik ...).
Singkatnya - apa yang terjadi jika Anda memiliki java-sun-1.4 dan java-opensouce-1.0 ... yang mana yang menggunakan "java"? Itu debian "/ usr / bin / java" adalah tautan simbolik dan "/usr/bin/java-sun-1.4" adalah alternatif dari "/ usr / bin / java"
Edit: Seperti yang dikatakan Richard,
update-alternatives
tidak cukup. Anda benar-benar perlu menggunakanupdate-java-alternatives
. Info lebih lanjut di:https://help.ubuntu.com/community/Java
sumber
Target saya yang benar adalah mendownloadnya dari Sun dan menginstalnya seperti itu. Kemudian Anda tahu persis di direktori apa semuanya masuk.
Tetapi jika Anda lebih suka tetap menggunakan cara aneh Debian menginstalnya, tebakan terbaik saya adalah direktori induk tepat di atas tempat biner java dan javac berada.
(karena ketika Anda menentukannya di jalur Anda, itu adalah $ JAVA_HOME / bin) (Jadi dalam kasus Anda itu akan menjadi ... $ JAVA_HOME / share dan $ JAVA_HOME akan menjadi / usr?)
Eh, kedengarannya tidak benar ...
Saya tertarik untuk mendengar jawabannya juga!
sumber