Windows10下AuthorizationCodeInstalledApp OAuth2认证报错求助
问题原因分析
你遇到的java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest报错,核心原因是本地OAuth2授权流程中用到的LocalServerReceiver类依赖Servlet API,但你的Windows10运行环境的classpath里缺少这个依赖。
为什么Windows7能正常运行?大概率是Win7环境的JDK或项目依赖中恰好包含了Servlet API的相关jar包;而Win10环境里没有。另外,用Win7生成的凭据能正常运行,是因为此时不需要走首次授权的流程(不需要启动本地服务器接收OAuth回调),也就不会触发调用LocalServerReceiver的代码路径,所以避开了这个依赖问题。
具体解决步骤
1. 确保引入完整的Google API Client Jetty扩展依赖
LocalServerReceiver属于google-api-client-jetty模块,如果你用Maven管理依赖,需要在pom.xml中添加:
<dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client-jetty</artifactId> <version>1.34.1</version> <!-- 替换成你使用的对应版本 --> </dependency>
如果是手动管理jar包,需要下载google-api-client-jetty-x.x.x.jar以及它依赖的Servlet API相关jar包(比如javax.servlet-api-x.x.x.jar),并添加到项目的classpath中。
2. 检查JDK版本与依赖兼容性
如果你使用的是Java 9及以上版本,由于模块化系统的限制,javax.servlet模块默认不在classpath中。这种情况下,你需要在启动参数中添加:
--add-modules java.servlet
或者确保你的依赖中包含模块化的Servlet API包。
3. 验证依赖完整性
可以通过查看项目的依赖树(Maven用mvn dependency:tree),确认javax.servlet-api是否被正确引入,并且没有被排除。
额外验证
添加依赖后,重新运行首次授权流程,此时LocalServerReceiver应该能正常加载HttpServletRequest类,完成OAuth2认证并生成新的凭据,之后Windows10环境就能正常运行了。
内容的提问来源于stack exchange,提问作者Petr Nekolný

