Tomcat tidak mengenali JAVA_HOME

15

Saya telah menginstal Ubuntu 14.04 Server, mengekstrak JDK1.8u5 dan Tomcat7, dan menambahkan yang berikut ke .profile (Saya juga mencoba menambahkannya ke .bashrc dengan hasil [non-] yang sama):

export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin

ketika saya menjalankan echo $JAVA_HOMEsaya mendapatkan hasil yang diharapkan dari /opt/java/jdk1.8.0_05. Saya juga dapat menjalankan java -versiondan mendapatkan respons yang benar dari Java. sejauh ini baik.

jadi sekarang saya mencoba untuk memulai Tomcat (coba juga catalina.sh), dan saya mendapatkan yang berikut:

user@ubuntu:~$ sudo /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

tapi ... saya baru mencoba echo $JAVA_HOMEdan berhasil?

isapir
sumber

Jawaban:

23

Ada teks bantuan di catalina.sh. Saya akan mengutipnya di sini:

#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

Ketika Anda mulai tomcatmenggunakan catalina.sh, itu mencari file setenv.shdan sumbernya . Sedang mencari di CATALINA_HOMEatau CATALINA_BASE.

Jadi cara yang lebih baik untuk set JAVA_HOMEuntuk tomcatadalah:

  1. Buat skrip bernama setenv.shdi folder CATALINA_BASE/bin, jika belum ada.
  2. Tambahkan baris ini ke setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Jadikan itu dapat dieksekusi.


Mengapa Anda harus menggunakan solusi ini:

Mengatur variabel lingkungan dalam skrip lebih aman. Usahakan selalu mengatur variabel secara lokal. Usahakan jangan gunakan /etc/environment, /etc/profiledan lain-lain jika Anda benar - benar tidak perlu Global Environment Variable. Pengaturan JAVA_HOMEdi setenv.shmemberi Anda kemampuan untuk menggunakan kucing jantan yang berbeda dengan aplikasi yang berbeda yang membutuhkan versi yang berbeda java, tetapi dijalankan oleh satu pengguna. Lingkungan pengguna lain tidak akan terpengaruh oleh Anda.

c0rp
sumber
4

Karena Anda telah menetapkan variabel lingkungan untuk pengguna Anda sendiri dan bukan untuk pengguna super, Anda memiliki dua opsi:

  1. Anda harus mengekspor variabel menggunakan -Eopsi sebagai berikut:

    sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh

    Perhatikan bahwa ini akan mengekspor semua variabel lingkungan saat menjalankan perintah. Ini tidak disukai karena lingkungan pengguna normal tumpah ketika Anda menjalankan perintah sebagai root. Ini tidak diinginkan.

  2. Ekspor variabel dalam file root.bashrc /etc/enviroment . Buka terminal dan ketik:

    sudo nano /etc/environment

    dan masukkan kata sandi administratif Anda, dan tambahkan baris berikut ke akhir file:

    JAVA_HOME=/opt/java/jdk1.8.0_05
    PATH=$PATH:$JAVA_HOME/bin

    lalu

    source /etc/environment

    atau nyalakan kembali mesin Anda dan coba lagi perintah yang Anda gunakan.


Memperbarui:

Jawaban ini memberikan petunjuk sebagai dua alasan mengapa langkah 2 tidak berfungsi, sudoakan mengatur ulang lingkungan dan menyediakan jalur aman, sehingga semua variabel global diatur ulang. Solusi akan digunakan

sudo su

dan kemudian jalankan perintah yang menggunakan variabel set environment.

pekerjaan
sumber
1
Terima kasih @Jobin - opsi 1 berfungsi jadi saya mengubah jawaban Anda. Sekarang saya akan memeriksa opsi 2, yang merupakan solusi pilihan saya, dan jika berfungsi saya akan menerima jawaban Anda.
isapir
Saya menambahkan perintah ke /root/.bashrcnano, seperti yang Anda sarankan, tetapi memanggil user@ubuntu:~$ source /root/.bashrchasil -bash: /root/.bashrc: Permission denieddan mencobanya dengan hasil sudo sudo: source: command not found. mencoba kembali perintah asli pada titik ini membawa saya kembali ke titik 0.
isapir
@Igal: Diedit jawaban saya untuk mengatasi masalah itu, Anda harus terlebih dahulu menggunakan sudo -isebelum Anda source. Terima kasih telah menunjukkannya.
jobin
ok, maafkan pertanyaan-pertanyaan pemula, tetapi bagaimana cara keluar dari sudo -isumber yang pernah saya sebut? tanpa keluar saya mendapatkan pesan kesalahan asli ...
isapir
@Igal: Cukup tekan Ctrl + d atau ketik exit.
Pekerjaan di
0

Solusi yang saya cari adalah di /etc/environmentmana, sebagaimana ditentukan di EnvironmentVariables , tidak memproses skrip dan tidak memperluas variabel, jadi menambahkan yang berikut ( tanpa ekspor) melakukan trik:

JAVA_HOME=/opt/java/jdk1.8.0_05

Lalu saya reboot sistem untuk perubahan yang terjadi.

isapir
sumber
0

Saya menambahkan JAVA_HOME dalam tomcat7.serviceskrip karena setenv.shtidak bersumber daricatalina.sh

Langkah:

1.Buka file skrip layanan tomcat7

sudo gedit /etc/init.d/tomcat7

2. Atur JAVA_HOME

.
.
.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

# Directory where the Tomcat 6 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# Use the Java security manager? (yes/no)
TOMCAT7_SECURITY=no

3. Mulai layanan Tomcat7

sudo service tomcat7 status

CᴴᴀZ
sumber