求助:重定向带安全上下文的URL时出现NoClassDefFoundError异常
这个java.lang.NoClassDefFoundError问题我碰到过不少,本质就是运行时JVM找不到指定的类文件,针对你遇到的com/sun/jersey/spi/inject/Errors$Closure缺失,大概率是Jersey依赖包出了问题,下面给你具体的排查和解决步骤:
检查Jersey依赖的完整性
com/sun/jersey/spi/inject/Errors$Closure属于Jersey的核心注入模块,如果你用Maven或Gradle管理依赖,要确保引入了正确且完整的Jersey核心包。以Maven为例,需要同时引入jersey-client和jersey-core,并且版本要保持一致:<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.19.4</version> <!-- 选择稳定的1.x版本,和项目中其他Jersey包版本统一 --> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.19.4</version> </dependency>要是你手动导入jar包,一定要确认
jersey-core.jar和jersey-client.jar都添加到了项目的运行时类路径中,缺一个都不行。排查依赖版本冲突
项目里如果同时引入了不同版本的Jersey包(比如1.x和2.x混着用),很容易导致类加载混乱。你可以用依赖分析命令找出冲突:- Maven:执行
mvn dependency:tree | grep jersey查看依赖树 - Gradle:执行
./gradlew dependencies | grep jersey
找到冲突的版本后,在pom.xml或build.gradle里用排除规则去掉不需要的那个版本,比如Maven中:
<dependency> <!-- 这里是引入了冲突依赖的那个包 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> </exclusion> </exclusions> </dependency>- Maven:执行
确认运行时类路径
如果是Web项目,要检查这些Jersey jar包是否已经部署到服务器的WEB-INF/lib目录下;如果是独立Java应用,要确保启动脚本里包含了所有必要的Jersey jar包,别漏了。有时候IDE编译时能找到类,但打包部署时漏掉依赖,就会触发这个错误。顺手修正一个小细节
你的代码里"Accept Language"的Header名称写错了,应该是"Accept-Language"(用连字符,不是空格),虽然这不是当前异常的原因,但可能影响后续请求的正确性,建议修正:ClientResponse resp = webResource.accept("application/json") .header("Authorization", "Basic " + authStringEnc) .header("Accept-Language", "en-US") // 修正Header名称 .get(ClientResponse.class);
内容的提问来源于stack exchange,提问作者Nitya Parihar




