Cara di seluruh sistem untuk mengatur atau mendapatkan $ JAVA_HOME di Ubuntu?

8

Saya bertanya-tanya apakah Ubuntu itu sendiri menyediakan cara seluruh sistem untuk menemukan saat ini JAVA_HOMEatau apakah ada tempat yang tepat untuk pengaturan JAVA_HOME.

Mac OS X bekerja dengan baik dalam hal ini, karena /usr/libexec/java_homeperintah mengembalikan arus JAVA_HOME. Tetapi untuk Ubuntu, materi yang saya temukan selalu mengatakan kepada saya untuk mengatur $JAVA_PATHmenunjuk ke jalur statis, yang disimpan di ~/.bash_profile.

Saya pikir, bagaimanapun, pendekatan ini memiliki beberapa kelemahan:

  1. Setelah Java diperbarui, nomor versi mini akan berubah, yang membuat jalur statis tidak lagi tersedia.
  2. Setelah mengubah JRE yang digunakan dalam sistem saya dengan update-alternatives, saya harus memodifikasi $JAVA_HOMEdi .bash_profile. Pekerjaan ekstra itu menyebalkan.
  3. Beberapa $JAVA_HOMEprogram yang diperlukan, tidak menyadari .bash_profilesama sekali. Saya harus mengatur $JAVA_HOMEskrip start-up mereka, oleh karena itu cara standar dan mudah untuk mendapatkan $JAVA_HOMEtampaknya penting bagi saya.

Nah, saran apa pun disambut. Terima kasih.

Jianwen W.
sumber

Jawaban:

6

Sedikit peretasan, tetapi letakkan baris ini di /etc/profileuntuk pengaturan di seluruh sistem:

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

sumber
Beberapa sysadmin suka mengutak-atik PATH sehingga / usr / bin belum tentu terlihat. Untuk memastikan Anda mengambil jalur versi yang benar-benar akan Anda jalankan, peretasan ulang yang lebih baik mungkin: export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
SimonB
ini berfungsi jika jalan ada. Apakah ada cara untuk membuatnya diam pada sistem yang tidak memiliki java?
Greggles
bagaimana melakukan ini di Mac? "readlink -e" tidak berfungsi.
Artanis Zeratul
1

Anda dapat mengatur variabel lingkungan di /etc/environment, yang mendapat pengaturan oleh PAM. Seharusnya juga ada symlink /usr/lib/jvmyang tidak berubah dengan rilis minor.

JAVA_HOME=/usr/lib/jvm/java-6-sun
Mgorven
sumber
0

Tetapkan profil sistem jalur

Edit file Path sistem / etc / profile

sudo gedit /etc/profile

Tambahkan baris berikut pada akhirnya

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Untuk http://javaandme.com/ untuk panduan instalasi lengkap.

Pratap Singh
sumber
0

Jika Anda yakin perintah 'java' dapat dipanggil, bukankah ini akan berhasil untuk Anda?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))
mlvnd
sumber
OP sedang mencari cara untuk mengatur seluruh $JAVA_HOMEsistem, tidak hanya di shell saat ini.
Celada
0

Solusi yang diterima byuser13742 mengasumsikan bahwa server sudah menginstal Java. Jika Anda menambahkan ini ke skrip terpusat untuk banyak server, ini akan memberikan beberapa kesalahan seperti:

dirname: missing operand
Try 'dirname --help' for more information.

Untuk menghindari itu dan hanya mengatur JAVA_HOME jika server memiliki lingkungan Java, sedikit peningkatan adalah:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

Saya juga memasukkan perubahan dari SimonB untuk digunakan whichuntuk menemukan di mana instalasi.

Greggles
sumber
Bisakah saya memasukkan ini ke dalam /etc/environment?
Jin Kwon