Tomcat không nhận ra JAVA_HOME


15

Tôi đã cài đặt Máy chủ Ubuntu 14.04, trích xuất JDK1.8u5 và Tomcat7 và thêm phần sau vào .profile (Tôi cũng đã thử thêm nó vào .bashrc với kết quả [không] tương tự):

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

Khi tôi chạy echo $JAVA_HOMEtôi nhận được kết quả mong đợi /opt/java/jdk1.8.0_05. Tôi cũng có thể chạy java -versionvà nhận được phản hồi chính xác từ Java. càng xa càng tốt.

vì vậy bây giờ tôi cố gắng khởi động Tomcat (cũng đã thử catalina.sh) và tôi nhận được những điều sau:

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

Nhưng ... tôi vừa thử echo $JAVA_HOMEvà nó đã hoạt động?

Câu trả lời:


23

Có một văn bản trợ giúp trong catalina.sh. Tôi sẽ trích dẫn nó ở đây:

#   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

Khi bạn bắt đầu tomcatsử dụng catalina.sh, nó tìm kiếm tập tin setenv.shtìm nguồn cung ứng . Nó đang tìm kiếm trong CATALINA_HOMEhoặc CATALINA_BASE.

Vì vậy, cách tốt hơn để thiết lập JAVA_HOMEcho tomcatlà:

  1. Tạo một tập lệnh có tên setenv.shtrong thư mục CATALINA_BASE/bin, nếu nó chưa tồn tại.
  2. Thêm dòng này vào setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Làm cho nó thực thi được.


Tại sao bạn nên sử dụng giải pháp này:

Đặt biến môi trường trong tập lệnh sẽ an toàn hơn. Luôn cố gắng đặt các biến càng cục bộ càng tốt. Hãy thử không sử dụng /etc/environment, /etc/profilevà những người khác nếu bạn thực sự không cần Global Environment Variable. Thiết JAVA_HOMEtrong setenv.shcung cấp cho bạn khả năng sử dụng Tomcat khác nhau với các ứng dụng khác nhau mà cần phiên bản khác nhau của java, nhưng chạy bởi một người dùng. Môi trường người dùng khác sẽ không bị ảnh hưởng bởi bạn.


4

Vì bạn đã đặt biến môi trường cho người dùng của riêng bạn chứ không phải cho siêu người dùng, bạn có hai tùy chọn:

  1. Bạn sẽ phải xuất biến bằng cách sử dụng -Etùy chọn như sau:

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

    Lưu ý rằng điều này sẽ xuất tất cả các biến môi trường trong khi chạy lệnh. Điều này không được ưa thích vì môi trường người dùng bình thường bị tràn ra khi bạn chạy lệnh với quyền root. Điều này là không mong muốn.

  2. Xuất biến trong tập tin gốc.bashrc /etc/enviroment . Mở một thiết bị đầu cuối và gõ:

    sudo nano /etc/environment

    và nhập mật khẩu quản trị của bạn và thêm các dòng sau vào cuối tệp:

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

    và sau đó

    source /etc/environment

    hoặc khởi động lại máy của bạn và sau đó thử lại lệnh bạn đang sử dụng.


Cập nhật:

Câu trả lời này cung cấp gợi ý như hai lý do tại sao bước 2 sẽ không hoạt động, sudosẽ đặt lại môi trường và cung cấp đường dẫn an toàn, vì vậy tất cả các biến toàn cục được đặt lại. Một cách giải quyết sẽ là sử dụng

sudo su

và sau đó thực thi lệnh sử dụng các biến môi trường được thiết lập.


1
Cảm ơn @Jobin - tùy chọn 1 hoạt động để tôi nêu lên câu trả lời của bạn. Bây giờ tôi sẽ kiểm tra tùy chọn 2, đây là giải pháp ưa thích của tôi và nếu nó hoạt động tôi sẽ chấp nhận câu trả lời của bạn.
isapir

Tôi đã thêm các lệnh vào /root/.bashrcvới nano, như bạn đề xuất, nhưng gọi user@ubuntu:~$ source /root/.bashrckết quả -bash: /root/.bashrc: Permission deniedvà thử nó với năng suất sudo sudo: source: command not found. thử lại lệnh ban đầu tại thời điểm này đưa tôi trở lại điểm 0.
isapir

@Igal: Đã chỉnh sửa câu trả lời của tôi để giải quyết vấn đề đó, trước tiên bạn nên sử dụng sudo -itrước bạn source. Cảm ơn đã chỉ ra rằng.
việc

ok, xin lỗi các câu hỏi của người mới, nhưng làm cách nào để thoát khỏi sudo -inguồn mà tôi đã gọi là nguồn? mà không thoát tôi đang nhận được thông báo lỗi ban đầu ...
isapir

@Igal: Chỉ cần nhấn Ctrl + d hoặc gõ exit.
việc

0

Giải pháp mà tôi đang tìm kiếm là trong /etc/environmentđó, như được chỉ định tại Môi trường Biến, không xử lý các tập lệnh và không mở rộng các biến, vì vậy, việc thêm các mục sau ( không xuất) đã thực hiện thủ thuật:

JAVA_HOME=/opt/java/jdk1.8.0_05

Sau đó, tôi khởi động lại hệ thống để những thay đổi có ảnh hưởng.


0

Tôi đã thêm JAVA_HOME trong tomcat7.servicetập lệnh vì setenv.shkhông được lấy nguồn từcatalina.sh

Các bước:

1.Mở tập lệnh dịch vụ tomcat7

sudo gedit /etc/init.d/tomcat7

2. Set 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. Bắt đầu dịch vụ tomcat7

sudo service tomcat7 status

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.