もうちょっといい方法ありそうだけどとりあえず動かさないと行けなかったのでやったことをメモ的に書く
もともとこんな環境でした
- 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の依存関係に追加すること