Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

Java8向けのjspを使うアプリがAL2023のTomcat9上で動作しない事情

TomcatがサポートするJavaのバージョンについて

現在EOLになっていないTomcatメジャーバージョンは9.0.x、10.1.x、11.0.xの3つで、それぞれ公式にサポートするJavaバージョンは以下となってます。(2025/12/24時点)

Tomcatバージョン 対応するJavaバージョン
9.0.x 8以降
10.1.x 11以降
11.0.x 17以降

ソース:https://tomcat.apache.org/whichversion.html

上記を見た限りTomcat9でJava8のアプリを動かせるように見えますが、Amazon Linux 2023(AL2023)で実際に動かしてみたところ、JSPがうまく動作しないことが判明しました。

Java8のアプリをAL2023のTomcat9上で動かす

OSはAL2023を使用します。

[ssm-user@AL2023 bin]$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.9.20251117"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/"
DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/"
SUPPORT_URL="https://aws.amazon.com/premiumsupport/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
VENDOR_NAME="AWS"
VENDOR_URL="https://aws.amazon.com/"
SUPPORT_END="2029-06-30"

TomcatとJavaをインストールします。取得元はAL2023のデフォルトレポジトリー(amazonlinux)です。

[root@AL2023 bin]# dnf install tomcat9
[root@ip-10-0-101-215 bin]# dnf install tomcat9
Last metadata expiration check: 0:02:55 ago on Thu Dec 18 10:34:29 2025.
Dependencies resolved.
================================================================================================================================================================================================================================================================================
 Package                                                                        Architecture                                         Version                                                                    Repository                                                 Size
================================================================================================================================================================================================================================================================================
Installing:
 tomcat9                                                                        noarch                                               1:9.0.111-1.amzn2023.0.1                                                   amazonlinux                                                92 k
Installing dependencies:
 ecj                                                                            noarch                                               1:4.23-1.amzn2023.0.4                                                      amazonlinux                                               2.4 M
 java-17-amazon-corretto-headless                                               x86_64                                               1:17.0.17+10-1.amzn2023.1                                                  amazonlinux                                                91 M
 javapackages-tools                                                             noarch                                               6.0.0-7.amzn2023.0.6                                                       amazonlinux                                                25 k
 tomcat9-el-3.0-api                                                             noarch                                               1:9.0.111-1.amzn2023.0.1                                                   amazonlinux                                               105 k
 tomcat9-jsp-2.3-api                                                            noarch                                               1:9.0.111-1.amzn2023.0.1                                                   amazonlinux                                                72 k
 tomcat9-lib                                                                    noarch                                               1:9.0.111-1.amzn2023.0.1                                                   amazonlinux                                               6.2 M
 tomcat9-servlet-4.0-api                                                        noarch                                               1:9.0.111-1.amzn2023.0.1                                                   amazonlinux                                               285 k
Installing weak dependencies:
 tomcat-native                                                                  x86_64                                               2.0.8-4.amzn2023.0.1                                                       amazonlinux                                                47 k

Transaction Summary
================================================================================================================================================================================================================================================================================
Install  9 Packages
(アウトプット割愛)
[root@AL2023 bin]# dnf install java-1.8.0-amazon-corretto java-1.8.0-amazon-corretto-devel
(アウトプット割愛)
[root@AL2023 bin]# dnf list installed | grep -e tomcat -e java
java-1.8.0-amazon-corretto.x86_64              1:1.8.0_472.b08-1.amzn2023         @amazonlinux
java-1.8.0-amazon-corretto-devel.x86_64        1:1.8.0_472.b08-1.amzn2023         @amazonlinux
java-17-amazon-corretto-headless.x86_64        1:17.0.17+10-1.amzn2023.1          @amazonlinux
javapackages-filesystem.noarch                 6.0.0-7.amzn2023.0.6               @amazonlinux
javapackages-tools.noarch                      6.0.0-7.amzn2023.0.6               @amazonlinux
tomcat-native.x86_64                           2.0.8-4.amzn2023.0.1               @amazonlinux
tomcat9.noarch                                 1:9.0.111-1.amzn2023.0.1           @amazonlinux
tomcat9-el-3.0-api.noarch                      1:9.0.111-1.amzn2023.0.1           @amazonlinux
tomcat9-jsp-2.3-api.noarch                     1:9.0.111-1.amzn2023.0.1           @amazonlinux
tomcat9-lib.noarch                             1:9.0.111-1.amzn2023.0.1           @amazonlinux
tomcat9-servlet-4.0-api.noarch                 1:9.0.111-1.amzn2023.0.1           @amazonlinux
[root@AL2023 bin]#

公式サンプルアプリのダウンロード

[root@AL2023 ~]# cd /var/lib/tomcat9/webapps/
[root@AL2023 webapps]# wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
--2025-12-04 05:08:23--  https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
Resolving tomcat.apache.org (tomcat.apache.org)... 151.101.2.132, 2a04:4e42::644
Connecting to tomcat.apache.org (tomcat.apache.org)|151.101.2.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4606 (4.5K)
Saving to: ‘sample.war’

sample.war                                                          100%[===================================================================================================================================================================>]   4.50K  --.-KB/s    in 0s

2025-12-04 05:08:24 (63.5 MB/s) - ‘sample.war’ saved [4606/4606]

[root@AL2023 webapps]#

アプリの起動と、サンプルアプリのwarが展開されることを確認します。

[root@AL2023 bin]# systemctl status tomcat9
● tomcat9.service - Apache Tomcat 9 Web Application Container
     Loaded: loaded (/usr/lib/systemd/system/tomcat9.service; disabled; preset: disabled)
     Active: active (running) since Tue 2025-12-16 12:14:34 UTC; 39min ago
   Main PID: 2575430 (java)
      Tasks: 41 (limit: 2253)
     Memory: 106.5M
        CPU: 7.559s
     CGroup: /system.slice/tomcat9.service
             └─2575430 /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java -Djavax.sql.DataSource.Factory=org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory -classpath /usr/share/tomcat9/bin/bootstrap.jar:/usr/share/tomcat9/bin/tomcat-juli.jar: -Dcatalina.base=/usr/share/tomcat9 -Dcatalina.home=/usr/share/tomcat9 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat9/temp -Djava.util.logging.config.file=/usr/share/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

[root@AL2023 webapps]# find . /usr/share/tomcat9/webapps/
.
./sample.war
./sample
./sample/META-INF
./sample/META-INF/MANIFEST.MF
./sample/META-INF/war-tracker
./sample/WEB-INF
./sample/WEB-INF/classes
./sample/WEB-INF/classes/mypackage
./sample/WEB-INF/classes/mypackage/Hello.class
./sample/WEB-INF/lib
./sample/WEB-INF/web.xml
./sample/images
./sample/images/tomcat.gif
./sample/hello.jsp
./sample/index.html
/usr/share/tomcat9/webapps/
/usr/share/tomcat9/webapps/sample.war
/usr/share/tomcat9/webapps/sample
/usr/share/tomcat9/webapps/sample/META-INF
/usr/share/tomcat9/webapps/sample/META-INF/MANIFEST.MF
/usr/share/tomcat9/webapps/sample/META-INF/war-tracker
/usr/share/tomcat9/webapps/sample/WEB-INF
/usr/share/tomcat9/webapps/sample/WEB-INF/classes
/usr/share/tomcat9/webapps/sample/WEB-INF/classes/mypackage
/usr/share/tomcat9/webapps/sample/WEB-INF/classes/mypackage/Hello.class
/usr/share/tomcat9/webapps/sample/WEB-INF/lib
/usr/share/tomcat9/webapps/sample/WEB-INF/web.xml
/usr/share/tomcat9/webapps/sample/images
/usr/share/tomcat9/webapps/sample/images/tomcat.gif
/usr/share/tomcat9/webapps/sample/hello.jsp
/usr/share/tomcat9/webapps/sample/index.html

アプリは問題なく動きますが、jspページをブラウザーアクセスしたらエラーが出ました。

Exception

javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: org/eclipse/jdt/internal/compiler/env/INameEnvironment has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:305)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
Root Cause

java.lang.UnsupportedClassVersionError: org/eclipse/jdt/internal/compiler/env/INameEnvironment has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
   java.lang.ClassLoader.defineClass1(Native Method)
   java.lang.ClassLoader.defineClass(ClassLoader.java:756)
   java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
(略)

エラーの原因

TomcatがJSPをコンパイルする時に使用するecjライブラリーのクラスファイルバージョンが55.0であるため、Java11以上で動かす必要があります。
クラスファイルバージョンとJavaバージョンについて:
https://docs.oracle.com/javase/specs/jvms/se24/html/jvms-4.html#jvms-4.1-200-B.2

AL2023デフォルトレポジトリー(amazonlinux)に残ってる一番古いecjバージョンが1:4.23-1.amzn2023.0.3ですが、1:4.21-1からJava8がサポート除外になったことを確認できます。

[root@AL2023 tmp]# dnf list --showduplicates ecj
Last metadata expiration check: 3:22:43 ago on Thu Dec 18 06:50:08 2025.
Installed Packages
ecj.noarch            1:4.23-1.amzn2023.0.4       @amazonlinux
Available Packages
ecj.noarch            1:4.23-1.amzn2023.0.3       amazonlinux
ecj.noarch            1:4.23-1.amzn2023.0.4       amazonlinux

[root@AL2023 bin]# dnf changelog ecj
Last metadata expiration check: 0:00:07 ago on Wed Dec 24 09:41:16 2025.
Listing all changelogs
Changelogs for ecj-1:4.23-1.amzn2023.0.4.noarch
* Fri Feb 03 00:00:00 2023 Keith Pimm <kpimm@amazon.com> - 4.23-1.amzn2023.0.4
- Add bcond to force dependency on JDK defined by javapackages-local
- Define ExclusiveArch to java_arches macro

* Tue Jan 31 00:00:00 2023 Stewart Smith <trawets@amazon.com> - 4.23-1.amzn2023.0.3
- Mass rebuild for AL2023

* Mon Aug 22 00:00:00 2022 Keith Pimm <kpimm@amazon.com> - 4.23-1.amzn2022.0.2
- Rebuild with Corretto 17

* Thu Jul 07 00:00:00 2022 Keith Pimm <kpimm@amazon.com> - 4.23-1.amzn2022.0.1
- Remove reference to OpenJDK

* Fri Apr 01 00:00:00 2022 Mat Booth <mat.booth@gmail.com> - 1:4.23-1
- Update to latest upstream release

* Sat Feb 05 00:00:00 2022 Jiri Vanek <jvanek@redhat.com> - 1:4.22-3
- Rebuilt for java-17-openjdk as system jdk

* Thu Jan 20 00:00:00 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.22-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild

* Mon Dec 06 00:00:00 2021 Mat Booth <mat.booth@gmail.com> - 1:4.22-1
- Update to latest upstream release

* Wed Sep 15 00:00:00 2021 Mat Booth <mat.booth@gmail.com> - 1:4.21-1
- Update to latest upstream release
- Drop build requirement on Java 8, ecj now requires Java 11

* Wed Aug 25 00:00:00 2021 Stefan Bluhm <stefan.bluhm@clacee.eu> - 1:4.19-3
- Added RHEL8 build.

結論

AL2023デフォルトレポジトリー(amazonlinux)のTomcat9でJSPを動かすにはJava11以降が必要です。
公式のパッケージではサポートされる構成でも、AL2023のようなOSに付属のパッケージにおいては依存パッケージの都合でアプリが動かない場合があります。