Linux'ta JAVA_HOME'u tüm kullanıcılar için ayarlama


185

Linux sisteminde yeniyim ve çok fazla Java klasörü var gibi görünüyor.

java -version bana şunu verir:

  • Java sürümü "1.7.0_55"
  • OpenJDK Çalışma Zamanı Ortamı (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64 Bit Sunucu VM (yapı 24.51-b03, karışık mod)

Bir Maven projesi oluşturmaya çalıştığımda hata alıyorum:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Lütfen root için değil de root için hangi dosyaları değiştirmem gerektiğini ve java'nın tam olarak nerede olduğunu söyler misiniz?

Yanıtlar:


354
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Ayrıcalıksız kullanıcı olarak oturum açtıysanız sudo başlığının başına, yani. sudo vim

  3. Ekleme moduna geçmek için 'i' tuşuna basın
  4. Ekle:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. oturumu kapatın ve tekrar oturum açın, yeniden source /etc/profilebaşlatın veya değişiklikleri geçerli kabuğunuza hemen uygulamak için kullanın

29
çift ​​tırnak işaretlerini silmeyi ve klavyenizden yeniden oluşturmayı unutmayın, çünkü yalnızca kopyalama ve yapıştırma sorunları oluşturabilir.
Sunil Kumar

12
@rbaleksandar bazı uygulamalar bağımlıdır, JAVA_HOMEkurulumunu da incitmez.
raffian

2
IntelliJ böyle bir uygulama - küçük bir uygulama değil.
Pete

12
Sen çalıştırmak için gereken source /etc/profilehemen almak da etkisiyle değişiklikler için!
Mohamed Taher Alrefaie

1
Bu beni doğru yöne çekti. Aslında /etc/profile.d/jdk.shbenim sistemimde yüzen bir bayat vardı .
Hermann

109

Tüm kullanıcılar için, aşağıdaki satırı yerleştirmenizi tavsiye ederim /etc/profile

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

Bu, dinamik olarak güncellenir ve alternatif sistemle iyi çalışır . Ancak güncellemenin yalnızca yeni bir giriş kabuğunda gerçekleşeceğini unutmayın.


10
yerine sadece düz JRE (hatta başsız) kullanımı uymak için - sadece kullandığımı export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")fark java, değiljavac
Roman Kruglov

@occulta En azından Maven, JAVA_HOME'un bir JDK'ya işaret etmesini bekliyor ve bunu java derleyicisini bulmak için kullanıyor.
Eero Aaltonen

1
readlinkUyumlu bir çözüm için oy verin ve güncelleyin / yükseltin, bu bile 5 yıllık bir iş parçacığıdır. Yalnızca / etc / profile düzenlememenizi, ancak dışa aktarmanızı özel dosyanın içine yerleştirmenizi öneririm, örneğin /etc/profile.d/java_environment.sh, belki chmod +x java_environment.shyeniden başlatmanız ve yeniden başlatmanız gerekir.
ChristophS

Mükemmel. Zorlu dirnameçözümümden daha iyi . Benim gibiyseniz ve burada neler olduğunu anlamak istiyorsanız, bu, girişteki metni boş bir dize ile eşleştirmenin basit bir yedeğidir. Değiştirmeler için "varsayılan" karakter /, ancak tutarlı olduğunuz sürece, karakteri /herhangi bir şeyle değiştirebilirsiniz . Bu durumda /yol ayırıcılar için kullandığımız gibi iki nokta üst üste .
Ungeheuer

35

/ Etc / profile ya da /etc/profile.d/jdk_home.sh gibi bir dosyayı kullanabilirsiniz.

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Bu dosya sadece yeni giriş kabukları ile yüklendi hatırlamak zorunda .. Yani bash -l veya yeni bir gnome-oturum sonra ve yeni Java sürümleri ile değişmez.


1
en azından linux'umda (raspbian), / etc / profile kaynaklanacak, /etc/profile.d/*.shbu yüzden dosyanızın çağrılması gerekiyor, bu jdk_home.shyüzden kaynaklanıyor
Hilikus

Teşekkürler @Hilikus :-) Ben buna göre değiştirdim.
flob

2
Teşekkür ederim. her iki dünyanın en iyisi için sizin ve @ Eero'nun cevabının bir karışımını yaptım;)
Hilikus

1
Bu en iyi cevap
Jacob

/etc/profile.d/jdk_home.shçok daha temiz bir cevap, en azından Ubuntu için , /etc/profilezaten çok fazla mantıkla dolu. Üzerine daha fazla şey eklemek akıllıca değildi ...
Ng Sek Long

30

Diğer yanıtlardan hiçbiri bile ayarı, RHEL 7'de benim için "yapışmasını" edildi JAVA_HOMEve PATHdoğrudan /etc/profileya da ~/.bash_profileişin olmaz. Her JAVA_HOMEayarlanıp ayarlanmadığını kontrol etmeye çalıştığımda , boş görünüyordu:

$ echo $JAVA_HOME
    (<-- no output)

Ne yapmam gerekiyordu içinde bir script kurmak /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Başlangıçta ilk satırı (the #!/bin/sh) ihmal ettim ve onsuz çalışmayacak.

Şimdi çalışıyor:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

RHEL 7 ile aynı deneyimi yaşadım. ~ / .Bash_profile'dan ihracatı kaldırdım ve bu yaklaşımı kullandım.
xpagesbeast

jdk_home.sh dosyasında #! / bin / sh gerekli değildir. yapılandırmayı yaptıktan sonra oturumu kapatıp tekrar giriş yaptığınızdan emin olun
kuhajeyan

12

Linux'ta bir yol ayarlamak çok kolay. Aşağıdaki gibi yapın:

Adım-1 Açık terminal ve tip sudo gedit .bashrc

Adım-2 Size şifrenizi soracaktır. Parolayı yazdıktan sonra bash dosyasını açar. Sonra bitirin ve aşağıya yazın

Aşama 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

Adım 4 Sonra dosyayı kaydedin ve dosyadan çıkın

Yukarıdaki tek bir kullanıcı içindir. Tüm kullanıcılar için aşağıdaki adımları izlemelisiniz

Aşama 1 gedit /etc/profile

Adım 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Aşama 3 export PATH=$PATH:$JAVA_HOME/bin

Bu yardımcı olur umarım. Teşekkürler!


2
bu cevap yalnızca geçerli kullanıcı için ayarlar.
Manuel Manhart

Thank you @ickyrr
PyDevSRS

7

Oracle'ın yaptıklarını yapmak (eski bir Sun Çalışanı olarak buna alışamıyorum)

ln -s latestJavaRelease / usr / java / default En
sonJavaRelease kullanmak istediğiniz sürümdür

sonra JAVA_HOME = / usr / java / default dosyasını dışa aktarın


6

Cevap verilen önceki mesajlar geçerlidir. Ancak aşağıdakilerle ilgili tek bir cevap tam değildir:

  1. / Etc / profilini değiştirmek yalnızca nedeni nedeniyle önerilmemektedir (/ etc / profile'de belirtildiği gibi):
  • Ne yaptığınızı bilmiyorsanız bu dosyayı değiştirmek iyi bir fikir DEĞİLDİR. Ortamınızda özel değişiklikler yapmak için /etc/profile.d/ adresinde custom.sh kabuk betiği oluşturmak çok daha iyidir, çünkü bu, gelecekteki güncelleştirmelerde birleştirme ihtiyacını önler. *
  1. Yukarıda belirtildiği gibi, özel değişiklikler için /etc/profile.d/custom.sh dosyası oluşturun.

  2. Şimdi, yüklenen Java'nın daha yeni sürümleriyle her zaman güncel kalmak için kesinlikle mutlak yolu koymayın, bunun yerine şunu kullanın:

# jdk'yi java ev olarak yapıyorsa

dışa aktar JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

VEYA

# jre ev olarak jre yapıyorsa

dışa aktar JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. Ve unutmayın #! custom.sh dosyasında / bin / bash

4

Yüklediğiniz bin dosya yolunu kopyalayın

YOUR PATH

aşağıdaki komutu yazarak terminali açın ve ortam dosyasını düzenleyin,

sudo nano /etc/environment

Bu dosyaya aşağıdaki satırı ekleyin ( YOUR_PATHsadece kopyalanan yolla değiştirerek ):

JAVA_HOME="YOUR_PATH"

Ortam değişkenini ayarlamak için bu yeterli olmalıdır. Şimdi bu dosyayı yeniden yükleyin:

source /etc/environment

şimdi uygulayarak test edin:

echo $JAVA_HOME

3
olny etkileri mevcut terminal oturumu
Fatih Türker

@ FatihTürker Bilgisayarınızı yeniden başlatın
Jack Giffin

Benim jdk11 kullanarak, YOUR_PATH/usr/lib/jvm/default-java/
Jack Giffin

JAVA_HOME yolu ayarlandı ancak çalışmıyor. yani java çalışmıyor. Yeniden
başlattıktan

2

Linux'ta bu satırı ~ / .profile dosyasına ekliyorum:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
Potansiyel olarak doğru bir cevap gibi görünüyor, ancak neden çalıştığını, yani ne yaptığını ve OP'nin probleminin ne olduğunu açıklayabilir misiniz ? Ayrıca, "Linux'ta" diyorsunuz, ancak birçok farklı Linux dağıtımları var ve hepsi için çalışmayabilir, lütfen bunun hangi dağıtım için işe yaradığını ekleyin.
Buurman

2

Bu sorunu çözmek için çok basit bir betik

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Ve test için:

echo $JAVA_HOME

2

Adım 1 - Mevcut java sürümünü "echo $ JAVA_HOME" ile kontrol edin

2.Adım - VIM / etc / Profile

Adım 3 - Dosyanın sonunda ihracat JAVA_HOME bulacaksınız, biz burada yeni yolu sağlamak gerekir, göreli olmadığından emin olun.

Adım 4 - Kaydet ve çık: wq

Adım 5 - "kaynak / etc / profile /", bu değişikliği gerçekleştirir

Adım 6 - Yine bir yankı $ JAVA_HOME yapın - değişiklik yansıtılır.


2

1 ... Terminali açmak için Ctlr+ Alt+ kısayolunu Tkullanma

2 ... Aşağıdaki komutu yürütün:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Önerilen) VM / bilgisayarınızı yeniden başlatın. Sen kullanabilirsiniz source /etc/sourcebilgisayarı yeniden başlatmak istemiyorsanız eğer

4 ... Terminali açmak için Ctlr+ Alt+ kısayolunu Tkullanma

5 ... ile JAVA_HOME taksit doğrulandı

echo $JAVA_HOME

Flob'dan tek katlı kopya, onlara kredi


2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME

1

Yeni bir giriş kullanmak zorunda kalmadan kaydetmek istediğiniz profili seçmek için iyi bir fikir olabilir.

ya: source / etc / veya. /vb/

Düzenlediğiniz profil nerede?


1

JAVA_HOME'u ayarlamaya hazır olsak da, JAVA_HOME'u veya başka bir ortam değişkenini ayarlamanın bazı avantajlarını paylaşmama izin verin:

1) JAVA_HOME'u gösteren uygulama başlangıç ​​ve yapılandırma dosyanızı etkilemeden JDK'yı yükseltmek kolaydır. sadece yeni sürümü indirmeniz ve JAVA_HOME'unuzun Java'nın yeni sürümünü gösterdiğinden emin olmanız gerekir. Ortam değişkeni veya bağlantıları kullanmanın en iyi yararı budur.

2) JAVA_HOME değişkeni, JDK kurulum dizinine giden tam yol yerine kısa ve özlüdür.

3) JAVA_HOME değişkeni platform bağımsızlığıdır, yani başlangıç ​​komut dosyanız JAVA_HOME kullanıyorsa, herhangi bir değişiklik yapmadan Windows ve UNIX üzerinde çalışabilir, sadece ilgili işletim sisteminde JAVA_HOME'u ayarlamanız gerekir.

Daha fazla bilgi için: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

Yorum yapma ayrıcalığım olmadığı için cevap olarak gönderiyorum.

Dikkat edilmesi gereken nokta : "That Dave Guy" tarafından gönderilen kabul edilen cevabı takip edin.

Değişkenleri ayarladıktan sonra, yüklü olduğu java dizinine uygun izinleri ayarladığınızdan emin olun.

chmod -R 755 /usr/java

1

Tüm operasyonel adımlar (java, parent dir, dosya düzenleme, ...) tek bir çözüm

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Sonuç:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Açıklama:

1) Tam komutu parçalara ayıralım

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Java komutundan java yolunu bulun

# $(which java)
"/usr/bin/java"

3) Sembolik yoldan göreceli yol alın

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) ana yol alın /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) ana yol alın /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

yazmak için sudo ile kafka-run-class.sh dosyasını açın

kafka-run-class.sh dosyasını kafka klasörünüzde bulabilirsiniz : kafka / bin / kafka-run-class.sh

bu hatları kontrol et

resim açıklamasını buraya girin

Diğer bölümdeki JAVA değişkenini java / bin'inizdeki java çalıştırılabilirine işaret edecek şekilde değiştirin. gibi JAVA = "$ java_home / java"


0

/ Etc / profile dizininde, bu dosyayı açarsanız, o dosyaya yazmanız önerilmez. Bunun yerine komutlarınızın bir komut dosyasını yapın (diyelim test.sh) /etc/profile.d klasörüne gidin ve test.sh dosyasını buraya koyun. Her yeniden başlattığınızda otomatik olarak / etc / profile tarafından çağrılır.


-1

Hattı kullanıyorum:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

~ / .profile dosyama giriş yaparken varsayılan java dizininin tabanını kullanır. Bu bash için.

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.