GlassFish 4.1启动时控制台抛出异常的原因排查(Eclipse Oxygen+JDK8)
这个GlassFish启动异常的原因拆解
别慌,这个问题我太熟了,核心是类文件版本不兼容+老版本ASM库跟不上新格式,具体拆解成几个关键点:
- 你项目里的
log4jJAR是个多版本JAR(Java 9才引入的特性),里面在META-INF/versions/9目录下存了专门给Java 9编译的类,这类文件的版本号是53.0(对应Java 9)。 - GlassFish 4.1自带的
org.glassfish.hk2.external.org.objectweb.asm库版本太老了,它最多只能处理Java 8的类文件(版本号52.0),根本认不出Java 9的类结构。 - 启动时GlassFish的HK2组件会扫描所有依赖JAR里的类,哪怕是多版本JAR里高版本目录下的文件也不会放过,老ASM一碰到Java 9的类就直接炸了,抛出你看到的
IllegalArgumentException。
补充一句:哪怕你用的是JDK 8运行,多版本JAR里的高版本类目录还是会被扫描工具读到,这才触发了这个兼容性坑。
内容的提问来源于stack exchange,提问作者Arthur de Rodrigue
相关产品推荐
相关产品推荐

