构建Spring Boot 3+GlassFish Jersey时Maven报“bad path element”问题
问题描述
在构建Spring Boot 3.0.6应用并集成GlassFish Jersey(版本3.1.1)时,Maven抛出异常警告:
[path] bad path element "/home/rmuller/.m2/repository/org/glassfish/hk2/hk2/3.0.3/hk2-utils.jar": no such file or directory
该文件的实际正确路径应为:
/home/rmuller/.m2/repository/org/glassfish/hk2/hk2-utils/3.0.3/hk2-utils-3.0.3.jar
已知可屏蔽该警告,但需了解根本原因;且已清理.m2目录,问题仍未解决。当前Maven依赖树如下:
+- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:3.1.1:compile | | +- jakarta.inject:jakarta.inject-api:jar:2.0.1:compile | | +- org.glassfish.jersey.core:jersey-common:jar:3.1.1:compile | | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.3:compile | | \- jakarta.ws.rs:jakarta.ws.rs-api:jar:3.1.0:compile | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:3.1.1:compile | +- org.glassfish.jersey.core:jersey-server:jar:3.1.1:compile | | +- org.glassfish.jersey.core:jersey-client:jar:3.1.1:compile | | \- jakarta.validation:jakarta.validation-api:jar:3.0.2:compile | +- org.glassfish.jersey.ext:jersey-bean-validation:jar:3.1.1:compile | | \- org.jboss.logging:jboss-logging:jar:3.5.0.Final:compile | +- org.glassfish.jersey.ext:jersey-spring6:jar:3.1.1:compile | | +- org.glassfish.jersey.inject:jersey-hk2:jar:3.1.1:compile | | | +- org.glassfish.hk2:hk2-locator:jar:3.0.3:compile | | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:3.0.3:compile | | | \- org.javassist:javassist:jar:3.29.0-GA:compile | | +- org.glassfish.hk2:hk2:jar:3.0.3:compile | | | +- org.glassfish.hk2:hk2-utils:jar:3.0.3:compile | | | +- org.glassfish.hk2:hk2-api:jar:3.0.3:compile | | | +- org.glassfish.hk2:hk2-core:jar:3.0.3:compile | | | +- org.glassfish.hk2:hk2-runlevel:jar:3.0.3:compile | | | \- org.glassfish.hk2:class-model:jar:3.0.3:compile | | | +- org.ow2.asm:asm-analysis:jar:9.2:compile | | | +- org.ow2.asm:asm-commons:jar:9.2:compile | | | +- org.ow2.asm:asm-tree:jar:9.2:compile | | | \- org.ow2.asm:asm-util:jar:9.2:compile | | \- org.glassfish.hk2:spring-bridge:jar:3.0.3:compile
根本原因分析
从依赖树可见,org.glassfish.hk2:hk2:3.0.3是一个聚合jar(由pom打包类型项目生成),其pom文件的依赖路径配置存在失误:声明hk2-utils依赖时,错误将jar的查找路径指向了hk2模块的目录下,而非hk2-utils自身的模块目录。
这类问题属于HK2组件发布阶段的打包配置错误,Maven解析该聚合jar的依赖时,会基于错误的配置生成不符合本地仓库规范的路径。即使清理.m2目录重新下载依赖,hk2的pom配置错误依然存在,因此问题会重复出现。
解决方法
排除错误聚合jar,手动引入独立模块
在jersey-spring6的依赖中排除org.glassfish.hk2:hk2:3.0.3,然后手动添加实际需要的hk2独立模块依赖,让Maven从正确路径加载jar包:<dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-spring6</artifactId> <version>3.1.1</version> <exclusions> <exclusion> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2</artifactId> </exclusion> </exclusions> </dependency> <!-- 手动添加hk2的各个独立模块 --> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2-utils</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2-api</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2-core</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2-runlevel</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>class-model</artifactId> <version>3.0.3</version> </dependency>升级HK2到修复版本
查看HK2官方发布记录,升级到已修复该路径配置错误的版本(如3.0.4及以上),可通过Spring Boot的依赖管理统一覆盖HK2版本:<dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.hk2</groupId> <artifactId>hk2-bom</artifactId> <version>3.0.4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者rmuller
相关产品推荐
相关产品推荐

