web-dev-qa-db-ja.com

Java8でTomcat7を実行しようとすると、「/ usr / lib / jvm / Java-7-Oracle / bin / Javaを統計できません」

サーバーをJava7からJava8にアップグレードして、サーバーがJava8でWebアプリケーションを実行できるようにしようとしています。私のマシンの1つで次のエラーが発生し、Java-7をまだ参照しているものがわからない

$ Sudo service Tomcat7 start
 * Starting Tomcat servlet engine Tomcat7
start-stop-daemon: unable to stat /usr/lib/jvm/Java-7-Oracle/bin/Java (No such file or directory)

このサーバーはUbuntu14.10(Utopic)です。すべてのJava-7およびJava-6パッケージをアンインストールしました。これで、次のJavaパッケージがインストールされました:

  • openjdk-8-jdk
  • openjdk-8-jre
  • openjdk-8-ソース
  • Oracle-Java8-installer

/ usr/share/Tomcat7/bin/setenv.shファイルがあります。次の行があります。

Java_HOME=`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'`

Javaの選択肢は正しいことを示しているようです:

$ update-alternatives --display Java
java - manual mode
  link currently points to /usr/lib/jvm/Java-8-Oracle/jre/bin/Java
/usr/lib/jvm/Java-8-openjdk-AMD64/jre/bin/Java - priority 1069
  slave Java.1.gz: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/man/man1/Java.1.gz
/usr/lib/jvm/Java-8-Oracle/jre/bin/Java - priority 1080
  slave Java.1.gz: /usr/lib/jvm/Java-8-Oracle/man/man1/Java.1.gz
Current 'best' version is '/usr/lib/jvm/Java-8-Oracle/jre/bin/Java'.

Java8は正しく機能します。

$ Java -version
Java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

なぜまだJava-7を探しているのか理解できません。次のgrepは、手がかりを明らかにしていません。

$ Sudo grep -r Java-7 /etc/Tomcat7 /etc/init.d/Tomcat7 /var/lib/Tomcat7/ /usr/share/Tomcat7

Tomcat7がまだJava-7を探す原因は何ですか?

1

参照は/etc/default/Tomcat7にありました:

Java_HOME=/usr/lib/jvm/Java-7-Oracle

これをJava-8に更新すると、すべてが正常に開始されます。アップグレードを行うためのスクリプト全体を次に示します。

#!/bin/sh

set -e

Sudo add-apt-repository -y ppa:webupd8team/Java
Sudo apt-get update

Sudo apt-get --force-yes -y install \
    openjdk-8-jdk \
    openjdk-8-jre \
    openjdk-8-source \
    Oracle-Java8-installer

Sudo apt-get --force-yes -y remove \
    openjdk-6-jdk \
    openjdk-6-jre \
    openjdk-6-jre-headless \
    openjdk-6-source \
    openjdk-7-jdk \
    openjdk-7-jre \
    openjdk-7-jre-headless \
    openjdk-7-source \
    Oracle-Java6-installer \
    Oracle-Java7-installer

echo "Setting Java provider to Java-8-Oracle"
Sudo update-Java-alternatives --set Java-8-Oracle || true
currentjava=`update-alternatives --display Java | grep 'points to'`
if [ "$currentjava" == "${currentjava/Java-8-Oracle/}" ]
then
    echo "Java not set properly"
    exit 1
fi

Sudo sed -i -r "s#^Java_HOME=.*#Java_HOME=\`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'\`#" /etc/default/Tomcat7

Sudo service Tomcat7 stop
sleep 4
Sudo killall -u Tomcat7 || true
sleep 3
Sudo service Tomcat7 start
2