Java 8+Jersey 2.27+Jetty 9.4.9应用频繁出现多位置扫描警告
解决Jetty + Jersey 环境下的两类常见警告问题
你提到的这两个警告其实是Jetty和Jersey依赖冲突导致的典型问题,虽然不影响应用运行,但确实看着闹心,我给你拆解一下原因和解决办法:
一、Unrecognized runtime asm version, assuming 393216 警告
原因
Jetty的AnnotationParser组件依赖ASM库来处理字节码和注解,而你的项目里可能同时引入了Jetty自带的ASM和Jersey依赖里的ASM,两者版本不匹配。Jetty 9.4.9预期的ASM版本是7.x左右(版本号393216对应ASM 7.0的标识),如果Jersey带的是更低版本的ASM,就会触发这个警告。
解决办法
在你的构建脚本(Maven或Gradle)里统一ASM版本,或者排除Jersey依赖中冲突的ASM模块:
Maven 示例
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-jetty-http</artifactId> <version>2.27</version> <exclusions> <!-- 排除Jersey自带的ASM依赖 --> <exclusion> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> </exclusion> <exclusion> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入Jetty兼容的ASM版本 --> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> <version>7.0</version> </dependency>
Gradle 示例
dependencies { implementation('org.glassfish.jersey.containers:jersey-container-jetty-http:2.27') { exclude group: 'org.ow2.asm', module: 'asm' exclude group: 'org.ow2.asm', module: 'asm-commons' } implementation 'org.ow2.asm:asm:7.0' implementation 'org.ow2.asm:asm-commons:7.0' }
二、javax.el.ArrayELResolver scanned from multiple locations 警告
原因
这个警告是因为javax.el.ArrayELResolver类被多个jar包同时包含了,通常是Jetty的jetty-jsp模块和Jersey的依赖(比如javax.el-api)重复引入了EL相关类,导致类加载器扫描到重复的类定义。
解决办法
找到重复引入的EL依赖,排除其中一个即可。如果你的项目不需要JSP支持,可以直接排除Jetty的jetty-jsp模块;如果需要JSP,就排除Jersey侧的EL依赖:
Maven 示例(排除Jetty的JSP模块)
<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.4.9.v20180320</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jsp</artifactId> </exclusion> </exclusions> </dependency>
Gradle 示例(排除Jersey的EL依赖)
dependencies { implementation('org.glassfish.jersey.containers:jersey-container-jetty-http:2.27') { exclude group: 'javax.el', module: 'javax.el-api' } }
额外建议
你可以用构建工具的依赖分析命令来排查冲突,比如Maven的mvn dependency:tree或者Gradle的./gradlew dependencies,这样能更清晰地看到哪个依赖引入了冲突的jar包,针对性排除更高效。
内容的提问来源于stack exchange,提问作者Juha Untinen
相关产品推荐
相关产品推荐

