ubuntu 16.04 + tomcat8でJava11を動かす

java-logo

もうちょっといい方法ありそうだけどとりあえず動かさないと行けなかったのでやったことをメモ的に書く

もともとこんな環境でした

  • OS:ubuntu 16.04
  • tomcat8
    # apt policy tomcat8
    tomcat8:
    Installed: 8.0.32-1ubuntu1.8
  • Java:
    # java -version
    openjdk version “1.8.0_191”
    OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.16.04.1-b12)
    OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

この環境でJavaだけ11にするという話
(将来的にはubuntu18.04になるしtomcat9になる予定)

OpenJDK11のインストール

公式からDLして解凍するだけの簡単なお仕事

root@test-env:~# wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
root@test-env:~# tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz
root@test-env:~# mv jdk-11.0.2 /usr/lib/jvm/

JAVA_HOMEの設定とか特にしてません(一旦なので)

tomcat8の起動ファイルを修正する

/etc/init.d/tomcat8 のファイル内にJVMを検索する処理があります

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# this is a work-around until there is a suitable runtime replacement
# for dpkg-architecture for arch:all packages
# this function sets the variable JDK_DIRS
find_jdks()
{
    for java_version in 9 8 7
    do
        for jvmdir in /usr/lib/jvm/java-${java_version}-openjdk-* \
                      /usr/lib/jvm/jdk-${java_version}-oracle-* \
                      /usr/lib/jvm/jre-${java_version}-oracle-* \
                      /usr/lib/jvm/java-${java_version}-oracle
        do
            if [ -d "${jvmdir}" ]
            then
                JDK_DIRS="${JDK_DIRS} ${jvmdir}"
            fi
        done
    done
 
    # Add the paths for the JVMs packaged by the older versions of java-package (<< 0.52 as in Wheezy and Trusty)
    JDK_DIRS="${JDK_DIRS} /usr/lib/jvm/j2re1.7-oracle /usr/lib/jvm/j2sdk1.7-oracle"
}
 
# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/default-java"
find_jdks

これ見たら一目瞭然ですがJava11なんでシラネーヨ状態ですね・・・
めんどくさいのでfind_jdksのあとに強制的に更新させます

79
80
81
82
83
# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/default-java"
find_jdks
JDK_DIRS="/usr/lib/jvm/jdk-11.0.2"  # 強制的にJDKを指定する!!

とりあえずこれでtomcat再起動してみます

・・・起動しません
catalina.outを見ます

-Djava.endorsed.dirs=/usr/share/tomcat8/endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

起動時のオプションが悪いようです。
tomcat8のスクリプトを見ると/usr/share/tomcat8/bin/catalina.shを呼んでおりその中でオプション
-Djava.endorsed.dirs=/usr/share/tomcat8/endorsed
を付けているのでその部分を削除して再度tomcatを起動するとうまく動くようになります。
複数行に渡ってこのような記述があるので

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
こうします
-classpath "$CLASSPATH" \

起動は出来ますがJava8→Java11の流れで含まれなくなったjarがあるので実行エラーが出たらエラー内容から特定してmavenの依存関係に追加すること

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA