Linux OpenJDK Debian tabanlı dağıtım için JAVA_HOME ortam değişkeni için doğru hedef nedir?


91

Windows'ta, JAVA_HOMEJDK yükleme klasörünü işaret etmelidir (böylece JAVA_HOME/bintüm yürütülebilir dosyaları ve JAVA_HOME/libstüm varsayılan jarkitaplıkları içerir ).

Sun'ın JDK paketini indirir ve Linux'a kurarsam, bu aynı prosedürdür.

Ancak Kubuntu'nun varsayılan OpenJDK paketini kullanmam gerekiyor. Sorun, tüm çalıştırılabilir dosyaların yerleştirilmiş olmasıdır /usr/bin. Ama kavanozlar yerleştirildi /usr/share/java. Aynı JAVA_HOMEklasör altında olmadıkları için Grails ile sorun yaşıyorum ve belki de standart Java yapısını bekleyen diğer uygulamalarda sorun çıkacaktır.

  1. Kullanırsam:

    JAVA_HOME=/usr
    

    Herhangi bir Java yürütülebilir dosyasını kullanmak isteyen tüm uygulamalar ve komut dosyaları standart prosedürü kullanabilir call $JAVA_HOME/bin/executable. (: Grails ben alıyorum örnek kavanoz farklı bir yerde olduğundan Ancak, bunlar hep bulunmayan ClassDefNotFoundiçin native2ascii).

  2. Öte yandan, kullanırsam:

    JAVA_HOME=/usr/share/java
    

    Java yürütülebilir (hiçbiri java, javacvs.) bulunabilir.

Öyleyse, JAVA_HOMEDebian tabanlı bir Linux'ta değişkeni kullanmanın doğru yolu nedir?

Yardımın için teşekkürler, Luis

Yanıtlar:


98

Sonunda benim için işe yarayan şey (Grails artık sorunsuz çalışıyor) neredeyse Steve B.'nin işaret ettiği gibi yapıyor:

JAVA_HOME=/usr/lib/jvm/default-java

Bu şekilde, kullanıcı sistem için varsayılan JDK'yı değiştirirse, JAVA_HOMEyine de çalışır.

default-java mevcut JVM'ye bir sembolik bağlantıdır.


6
Debian 7'de böyle bir bağlantı yok gibi görünüyor
a1an

3
RHEL5.10'da, / usr / lib / jvm / java
Brian

1
/ Usr / lib / jvm / java-7-openjdk-amd64 kullandım
Randall Bohn

Oracle Linux 7 için (bu CentOS ve RHEL için geçerli olmalıdır ), /etc/profile.d/java.sh adında bir dosya oluşturdum ve şu şekilde doldurdum: JAVA_HOME = / usr / lib / jvm / jre-openjdk export JAVA_HOME / etc / profile yeniden kaynak sağlandıktan sonra (kaynak / etc / profile çalıştırılarak) JAVA_HOME beklendiği gibi dolduruldu.
darnold0714

80

Birden çok java sürümünü yönetmek için alternatifler kullanırsanız JAVA_HOME, sembolik bağlantılı java (veya javac) temelinde şu şekilde ayarlayabilirsiniz :

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

3
Bu benim için çalışıyor: JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / jre / bin / java ::")
dpnsan

4
Mükemmel çözüm, farklı işletim sistemlerinde farklı yerlere işaret etme eğiliminde olan JAVA_HOME ile yıllarca süren baş ağrılarımı çözüyor.
Datageek

3
Bu akıllı çözümün Gentoo gibi /usr/bin/javabir komut dosyasına ( /usr/libexec/eselect-java/run-java-tool.bash) işaret eden dağıtımlarda çalışmayacağını unutmayın . yine de güzel bir yaklaşım. Değiştireceğim tek şey, yumurtlamayı önlemek için Bash'in yerleşik ikamesini kullanmaktır sed, örneğin:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
RubyTuesdayDONO

Bu iyi çalışıyor :) Değiştirmek javacisteyebilirsiniz javaçünkü herkes JDK'ya sahip değildir; sadece JRE
Hanxue

1
@AlexisWilke javac yerine şimdi java
bbaassssiiee

7

Standart Ubuntu kurulumu, çeşitli Java sürümlerini yerleştiriyor gibi görünüyor /usr/lib/jvm. javacSenin yolunda bulabilir, java buna Softlink olacaktır.

JAVA_HOMEOrtam değişkenini ayarladığınız ve yolunuzda yeni Java'nın bulunduğundan emin olduğunuz sürece, kendi Java sürümünüzü istediğiniz herhangi bir yere yüklemekte sorun yoktur bin.

Bunu yapmanın basit bir yolu, Java ana sayfasının bir yazılım bağlantısı olarak var olmasını sağlamaktır, böylece sürümleri yükseltmek veya değiştirmek isterseniz yalnızca bunun işaret ettiği dizini değiştirmeniz gerekir - örneğin:

/usr/bin/java --> /opt/jdk/bin/java,

/opt/jdk --> /opt/jdk1.6.011

Debian ile Ubuntu çözümlerini önermek tehlikelidir. Değişebilirler ve değişir.
RichieHH 05

4
İstekte bulunanın Kubuntu kullandığını söylediğine dikkat edin, bu nedenle Ubuntu çözümleri iyi olmalıdır.
Joseph Holsten

0

Genellikle herhangi bir JAVA_HOME ortam değişkenine sahip değilim. Java kendi kendine kurabilir. Java java.home içinde sistem özelliği bulunmalıdır.


Genelde bende de yok. Ancak, kurmazsam, Grails JAVA_HOME'un orada olmadığından şikayet ediyor ve iptal ediyor.
Luis Soeiro

1
karınca
debian'da


0

JAR dosyalarıyla ilgili sorun yaşıyorsanız, CLASSPATH'inizin bu dosyaların konumunu içerecek şekilde ayarlandığından da emin olurum. Bununla birlikte, CLASSPATH'ın genellikle farklı programlar için farklı şekilde ayarlanması gerektiğini ve genellikle bireysel programlar için benzersiz bir şekilde ayarlanması gereken bir şey olduğunu görüyorum.



0

Ubuntu'daki openjdk-6-jre ve openjdk-6-jre-headless paketlerinde benzer sorunlar keşfettim.

Sorunum openjdk-6-jre ve openjdk-6-jre-headless paketlerini temizleyip yeniden kurarak çözüldü. Alternatifler yalnızca openjdk-6-jre ve openjdk-6-jre-headless paketlerinin yeni bir yüklemesinde güncellenir.

Aşağıda, temizlemeden sonra bir kurulum örneği verilmiştir:

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.
...

Yukarıda update-alternativesçeşitli Java ikili dosyaları için bağlantılar kurmak için çalıştırıldığını görebilirsiniz .

Bu kurulumdan sonra /usr/bin, içindeki /etc/alternativesher ikili program için bağlantılar, bağlantılar ve dosyalar da bulunur /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

Bunu, tasfiye etmeden kurulumla tartışalım.

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) ...
...

Gördüğünüz gibi update-alternativestetiklenmiyor.

Bu yüklemeden sonra, içindeki Java ikili dosyaları için dosya /var/lib/dpkg/alternativesyok /etc/alternatives, içinde bağlantı yok ve içinde bağlantı yok /usr/bin.

Dosyaların kaldırılması /var/lib/dpkg/alternativesda kesintiye uğrar update-java-alternatives.


0

Ubuntu 12.04 bu çalışır ...

JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre


0

Fedora kullanıcısı için bir güncelleme olarak, alternatifler mevcut java dizinini / usr / java / default olarak ayarladı

Bu nedenle, sınıf yolunuzda her zaman alternatifler mevcut seçiminizin olması için JAVA_HOME'unuzu / usr / java / default olarak ayarlamanız gerekir

HTH!


0

Ben her zaman JAVA_HOME'u /usr/bin/java.

JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"

Bu şekilde, her iki alternatif de aynı konuma işaret eder


-1

Hatırladığım kadarıyla update-alternatives yerine update-java-alternatives komut dosyasını kullandım. Ve JAVA_HOME'u benim için doğru şekilde ayarladı.


Ubuntu 20.4'te yok
Martin Schröder

-1

Lütfen güncelleme-alternatifler komutunun ne yaptığına bakın (iyi bir adamı var ...).

Kısaca - java-sun-1.4 ve java-opensouce-1.0'a sahipseniz ne olur ... hangisi "java" yı alır? Debian "/ usr / bin / java" sembolik bir bağlantıdır ve "/usr/bin/java-sun-1.4" "/ usr / bin / java" için bir alternatiftir

Düzenleme: Richard'ın dediği gibi update-alternatives, yeterli değil. Aslında kullanmanız gerekiyor update-java-alternatives. Daha fazla bilgi için:

https://help.ubuntu.com/community/Java


güncelleme alternatifleri yeterli değil. Güncelleme-java-alternatifleri olması gerekiyor
RichieHH

@Richard: evet, kaydetti. İlk kez bununla ilgileniyorum, bu yüzden Google'da araştırdım ve Ubuntu'nun belgelerini buldum. Teşekkürler!
elcuco

-2

Doğru hedefim her zaman onu Sun'tan indirmek ve bu şekilde kurmak olmuştur. O zaman her şeyin tam olarak hangi dizine girdiğini bilirsiniz.

Ancak Debian'ın onu kurduğu tuhaf şekilde devam etmeyi tercih ederseniz, en iyi tahminim java ve javac ikili dosyalarının bulunduğu ana dizin olacaktır.

(yolunuzda belirttiğinizde $ JAVA_HOME / bin olur) (Yani sizin durumunuzda ... $ JAVA_HOME / share ve $ JAVA_HOME / usr olur mu?)

Eh, kulağa pek doğru gelmiyor ...

Bunun cevabını da duymakla ilgileniyorum!


Debian'ı kullanırken gerçekten debian yapılarına uymanız gerekir, aksi takdirde daha sonraki sistem güncellemeleri size bozuk bir sistem bırakacaktır.
RichieHH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.