You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark-Shell与IntelliJ项目中使用Guava解析域名结果不一致问题

问题原因分析及解决方案

核心差异根源

这种不一致通常由以下几个原因导致:

  • 依赖版本冲突
    IntelliJ项目的依赖链中可能混入了旧版本的Guava,或者其他包含公共后缀列表的库。旧版Guava的公共后缀列表可能未收录googleapis.com,如果旧版依赖被优先加载,InternetDomainName就无法识别该域名的私有顶级域,直接返回原域名。而Spark-Shell的依赖环境中,你指定的33.0.0-jre版本Guava被正确加载,能匹配到最新的后缀列表。

  • 公共后缀列表加载异常
    Guava的顶级私有域名识别依赖jar包内的public_suffix_list.dat文件。在IntelliJ的运行环境中,可能因为类加载器限制、资源文件被其他库覆盖,或者打包配置问题,导致Guava无法读取到正确的后缀列表文件,进而无法解析googleapis.com。Spark-Shell的类加载机制(自定义URLClassLoader)能正确定位到Guava jar中的资源文件。

  • 类加载器逻辑差异
    普通Java项目的类加载器(AppClassLoader)和Spark的类加载器优先级不同。Spark会优先加载用户提交的依赖包,避免与自身内置依赖冲突;而IntelliJ项目如果未配置依赖优先级,可能出现其他框架的内置旧版Guava覆盖你指定的版本,引发功能异常。

排查与解决建议

  • 检查项目依赖树(Maven用mvn dependency:tree,Gradle用./gradlew dependencies),找出并排除旧版Guava依赖,确保项目仅依赖33.0.0-jre版本。
  • 验证Guava jar的完整性:解压项目依赖的Guava jar,确认public_suffix_list.dat存在且包含googleapis.com条目。
  • 在IntelliJ的运行配置中调整类加载顺序,将Guava jar设置为优先加载项,避免被其他依赖覆盖。

内容的提问来源于stack exchange,提问作者Hrashikesh Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:00:05