Tomcat이 JAVA_HOME을 인식하지 못합니다


15

우분투 14.04 서버를 설치하고 JDK1.8u5와 Tomcat7을 추출하고 .profile에 다음을 추가했습니다 (유사한 결과가 아닌 .bashrc에 추가하려고 시도했습니다).

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

내가 실행 echo $JAVA_HOME하면의 예상 결과를 얻습니다 /opt/java/jdk1.8.0_05. java -versionJava를 실행 하고 올바른 응답을 얻을 수도 있습니다 . 여태까지는 그런대로 잘됐다.

이제 Tomcat (catalina.sh를 시도)을 시작하려고하면 다음과 같은 결과가 나타납니다.

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

하지만 ... 방금 시도했는데 echo $JAVA_HOME효과가 있었습니까?

답변:


23

에 도움말이 있습니다 catalina.sh. 여기에 인용하겠습니다.

#   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

tomcat사용 하기 시작하면 catalina.sh파일을 검색 setenv.sh하고 소싱 합니다. CATALINA_HOME또는 에서 검색 중 CATALINA_BASE입니다.

세트에 더 좋은 방법이 그래서 JAVA_HOME에 대한 tomcat것입니다 :

  1. setenv.sh폴더에 이름이 지정된 스크립트 CATALINA_BASE/bin가 없으면 작성하십시오 .
  2. 이 줄을 추가 setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. 실행 가능하게 만드십시오.


이 솔루션을 사용해야하는 이유 :

스크립트에서 환경 변수를 설정하는 것이 더 안전합니다. 항상 가능한 한 로컬 변수를 설정하십시오. 사용하지 않는 시도 /etc/environment, /etc/profile당신이 정말로 경우 다른 사람 하지 않습니다 필요합니다 Global Environment Variable. 설정 JAVA_HOME에서하는 것은 setenv.sh당신의 다른 버전을 필요로 다른 응용 프로그램과 다른 TOMCATS를 사용하는 능력을 제공 java하지만, 하나의 사용자에 의해 실행합니다. 다른 사용자 환경은 영향을받지 않습니다.


4

수퍼 유저가 아닌 자신의 사용자에 대해 환경 변수를 설정 했으므로 다음 두 가지 옵션이 있습니다.

  1. -E옵션을 사용하여 다음과 같이 변수를 내 보내야합니다 .

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

    이것은 명령을 실행하는 동안 모든 환경 변수를 내 보냅니다. 루트로 명령을 실행할 때 일반 사용자 환경이 유출되므로 바람직하지 않습니다. 이것은 바람직하지 않습니다.

  2. 루트.bashrc /etc/enviroment 파일 에서 변수를 내 보냅니다 . 터미널을 열고 다음을 입력하십시오.

    sudo nano /etc/environment

    관리 비밀번호를 입력하고 파일 끝에 다음 줄을 추가하십시오.

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

    그리고

    source /etc/environment

    또는 기계를 다시 시작한 후 사용중인 명령을 재 시도하십시오.


최신 정보:

이 답변은 2 단계가 작동하지 않는 이유 sudo, 환경을 재설정하고 안전한 경로를 제공하는 두 가지 힌트를 제공하므로 모든 전역 변수가 재설정됩니다. 해결 방법은

sudo su

그런 다음 설정된 환경 변수를 사용하는 명령을 실행하십시오.


1
감사합니다 @Jobin-옵션 1이 작동하므로 답변을 찬성했습니다. 이제 선호하는 솔루션 인 옵션 2를 확인하고 작동하면 답을 수락하겠습니다.
isapir

/root/.bashrc제안한대로 nano에 명령을 추가 했지만 user@ubuntu:~$ source /root/.bashrc결과를 호출 -bash: /root/.bashrc: Permission denied하고 sudo yields로 시도했습니다 sudo: source: command not found. 이 시점에서 원래 명령을 다시 시도하면 다시 0 점으로 돌아갑니다.
isapir

@Igal : 당신이 처음 사용해야합니다, 그 문제를 해결하기 위해 내 대답을 편집 sudo -i하기 전에 source. 지적 해 주셔서 감사합니다.
jobin

좋아, 초보자 질문을 용서하지만 sudo -i소스를 호출하면 어떻게 종료 합니까? 종료하지 않고 원래 오류 메시지가 나타납니다 ...
isapir

@Igal : Ctrl + d를 누르거나을 입력하십시오 exit.
jobin

0

내가 찾고있는 솔루션 /etc/environmentEnvironmentVariables에 지정된 것처럼 스크립트를 처리하지 않고 변수를 확장하지 않으므로 다음 내 보내지 않고 추가 하면 트릭이 발생합니다.

JAVA_HOME=/opt/java/jdk1.8.0_05

그런 다음 변경 사항을 적용하기 위해 시스템을 재부팅했습니다.


0

에 의해 제공되지 않았으므로 tomcat7.service스크립트 에 JAVA_HOME을 추가 setenv.sh했습니다.catalina.sh

단계 :

1. Tomcat7 서비스 스크립트 파일 열기

sudo gedit /etc/init.d/tomcat7

2. 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. Tomcat7 서비스 시작

sudo service tomcat7 status

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.