为什么Eclipse中jersey-container-jetty-http.jar会出现重复类条目
jersey-container-jetty-http.jar 同名类双条目问题说明
你观察到的同名类两条条目现象和stub存根无关,属于Jar包多版本打包特性+Eclipse展示逻辑的正常表现,具体机制如下:
产生原因
- Jersey官方打包
jersey-container-jetty-http组件时采用了多版本Jar(Multi-Release JAR) 规范,这类Jar包会在META-INF/versions目录下存放适配不同JDK版本的类文件,和Jar根目录下的基础类文件共存,用来兼容从低版本到支持模块化的高版本JDK运行环境。 - Eclipse的包资源管理器会把两个路径下的同名类都直接展示出来,所以你会看到
JettyHttpContainer.class、JettyHttpContainerFactory.class各有两条条目。
运行逻辑
运行时JVM会根据当前使用的JDK版本自动选择加载对应路径的类:
- JDK 8及以下版本只会加载Jar根目录下的类文件
- JDK 9及以上支持模块化的版本,会优先加载
META-INF/versions下匹配当前JDK版本的类文件
整个过程只会加载其中一个类,不会出现类冲突、重复定义的异常,完全不影响项目正常运行。
验证方法
你可以手动解压对应Jar包确认目录结构:
- 根目录下
org/glassfish/jersey/jetty/http路径存在两个目标类 META-INF/versions/[JDK版本号]/org/glassfish/jersey/jetty/http路径下存在两个同名类

内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

