问题背景:
因为要做基于maven-proguard的代码混淆,需要把混淆后的class文件更新至原jar包中。
# 解压jar包 看到三个文件夹 BOOT-INF META-INF org
jar -xvf xxx.jar
# 替换类文件
#压缩
jar -cvfM0 xxx-pg.jar BOOT-INF/ META-INF/ org/
#启动
nohup jar -jar xxx-pg.jar &
问题描述:
仔细查看报错信息,发现报错日志如下:
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1183) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 10 common frames omitted
解决思路:
网上搜到的文章大多是servlet-api.jar包版本问题,跟我遇到的不一样。一顿操作后发现是引入了其他jar包中的ServletContext类导致。
# java启动时增加运行参数
nohup jar -jar -verbose:class xxx-pg.jar &
发现javax.servlet.ServletContext竟然是从hbase-shaded-server-1.2.6.jar中加载的
maven依赖删除此jar解决。