web-dev-qa-db-ja.com

TomcatはJava_HOMEを認識しません

Ubuntu 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 -versionを実行して、Javaから正しい応答を取得することもできます。ここまでは順調ですね。

だから今、私は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を試してみましたが、うまくいきましたか?

14
isapir

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

catalina.shを使用してTomcatを起動すると、ファイルsetenv.shおよびsourcing itを検索します。 CATALINA_HOMEまたはCATALINA_BASEで検索しています。

TomcatJava_HOMEを設定するより良い方法は次のとおりです。

  1. setenv.shという名前のスクリプトをフォルダーCATALINA_BASE/binに作成します(まだ存在しない場合)。
  2. この行をsetenv.shに追加します

    export Java_HOME=/opt/Java/jdk1.8.0_05
    
  3. 実行可能にします。


このソリューションを使用する理由:

スクリプトで環境変数を設定する方が安全です。できるだけローカルに変数を設定するようにしてください。本当にしない/etc/environmentが必要な場合は、/etc/profileGlobal Environment Variableなどを使用しないでください。 Java_HOMEsetenv.shを設定すると、異なるバージョンのJavaを必要とするが、1人のユーザーが実行する異なるアプリケーションで異なるTomcatを使用できるようになります。他のユーザー環境は影響を受けません。

19
c0rp

スーパーユーザーではなく、自分のユーザーに環境変数を設定しているため、次の2つのオプションがあります。

  1. 次のように-Eオプションを使用して変数をエクスポートする必要があります。

    Sudo -E /opt/Tomcat7/Apache-Tomcat-7.0.53/bin/startup.sh
    

    これにより、コマンドの実行中にすべての環境変数がエクスポートされることに注意してください。 rootとしてコマンドを実行すると通常のユーザー環境が流出するため、これは好ましくありません。これは望ましくありません。

  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が機能しない理由として2つのヒントを提供しました。Sudoは環境をリセットし、安全なパスを提供するため、すべてのグローバル変数がリセットされます。回避策は使用することです

Sudo su

そして、設定された環境変数を使用するコマンドを実行します。

4
jobin

Tomcat7.servicesetenv.shから取得されなかったため、catalina.shスクリプトにJava_HOMEを追加しました

手順:

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

0
CᴴᴀZ

私が探していた解決策は/etc/environmentにあります。これは EnvironmentVariables で指定されているように、スクリプトを処理せず、変数を展開しません。したがって、次の(withoutexport)トリック:

Java_HOME=/opt/Java/jdk1.8.0_05

次に、変更を有効にするためにシステムを再起動しました。

0
isapir