tomcat9升级10后,geoserver无法启动解决
前言:之前tomcat漏洞,只能升级tomcat版本,官方介绍如果原项目中有依赖javax.servlet,需要将该依赖同步更新为jakarta.servlet。开源的geoserver确实使用了servlet包,所以需要转换下。
#官方升级介绍
https://blog.csdn.net/qq_39463175/article/details/88377270
Tomcat 10 及更高版本的用户应该知道,由于作为 Java EE 转移到 Eclipse 基金会的一部分而从 Java EE 转移到 Jakarta EE,所有已实现 API 的主要包 javax.*
已从jakarta.*
. 这几乎肯定需要更改代码以使应用程序能够从 Tomcat 9 及更早版本迁移到 Tomcat 10 及更高版本。已经开发了一个 迁移工具来帮助这个过程。
一,准备环境
1,先下载相关的中间件和包
#tomcat10 下载
https://tomcat.apache.org/download-10.cgi
#geoserver 下载
http://geoserver.org/release/maintain/
#Jakarta EE 的 Apache Tomcat 迁移工具
https://tomcat.apache.org/download-migration.cgi
#也可以下载源码,自己编译这个工具
https://github.com/apache/tomcat-jakartaee-migration
二,更新过程
1,在发布geoserver的war包时,tomcat10会报错,可以看到和 servlet有关
org.apache.catalina.core.StandardContext.listenerStart 配置应用程序监听器[org.geoserver.GeoserverInitStartupListener]错误
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
2,此时就需要用Jakarta EE工具转换一下geoserver的war包,为我将war包复制到jakartaee-migration 工具下的lib目录,注意如果是源码编译的工具,报名应该是jakartaee-migration-x.x.x-SNAPSHOT-shaded.jar
java -jar jakartaee-migration-1.0.0.jar geoserver.war geoserver_new.war
3,将转换后war重新放进webapps目录,重启tomcat就可以了
注意,war包会覆盖当前解析的geoserver业务,所以不要在生产和开发环境直接升级,如果是必须升级tomcat10,也只能新启动一个tomcat10,然后慢慢迁移geoserver的业务
三,源码编译工具
1,git bash里克隆tomcat-jakartaee-migration的仓库。今天git又抽风打不开,我直接在码云下载了
git clone git@github.com:apache/tomcat-jakartaee-migration.git
2,安装Maven
按照迁移工具的说明,需要使用Maven对克隆的源码进行构建。我们来到Maven官网,根据自己的os进行下载。今天我全在Windows下操作,下载 apache-maven-x.x.x-bin.zip ,如果是Linux系统请下载上方的 .tar.gz 文件,下载到的是二进制文件,不需要安装,直接解压到一个目录即可。
#maven 下载
https://maven.apache.org/download.cgi
解压后可以设置环境变量,这里我就不设置环境变量了,可以绝对路径使用
#有环境变量运行,在git下来的工具源码路径执行
mvn verify
#没设置环境变量就用绝对路径
cd C:\tomcat-jakartaee-migration-main #cd到工具源码路径
# 执行maven 命令,这个命令有点久
C:\apache-maven-3.8.5-bin\apache-maven-3.8.5\bin\mvn.cmd verify
如图上就算是编译完成,包会保存在target目录,然后迁移war包,不过这里会报错,
java -jar jakartaee-migration-1.0.1-SNAPSHOT.jar geoserver.war geoserver_new.war
报错,不会java,这里只能作罢,以后再请教大佬看看
Exception in thread "main" java.util.zip.ZipException: Bad CRC checksum for entry WEB-INF/lib/spring-beans-5.2.20.RELEASE.jar: 295676c1 instead of 58064a31
四,总结
软件这种东西每天都在更新,如果要用别人的东西,只能跟着不断学习,以上就是tomcat9升级tomcat10,连带geoserver一起升级的方法。
最后的最后(Last but not least),欢迎交流: