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

Scala(AKKA)运行时出现NoClassDefFoundError异常求助

解决Scala(AKKA)应用中commons-codec的NoClassDefFoundError问题

看起来你已经做了基础的依赖配置,但运行时还是找不到org.apache.commons.codec.binary.Base64类,这个问题本质是编译时依赖可达,但运行时类路径中缺失对应的 jar 包,结合你的多模块项目配置,我给你几个具体的排查和解决方向:

1. 检查依赖传递性与多模块依赖树

你的firma项目依赖plugin模块,且firmaDependencies是pluginDependencies加上commons-codec,首先要确认依赖没有被意外排除。执行以下sbt命令查看firma项目的完整依赖树:

sbt firma/dependencyTree

在输出中找到commons-codec:commons-codec:1.10,确认它存在且没有被其他依赖覆盖成旧版本。如果发现有冲突的版本,可以用依赖强制配置锁定版本。

2. 强制锁定commons-codec版本,避免依赖冲突

项目中其他依赖可能引入了不同版本的commons-codec,导致运行时加载了不兼容的版本。在你的commonSettings中添加以下配置,强制整个项目使用你指定的1.10版本:

dependencyOverrides += "commons-codec" % "commons-codec" % codecVersion

3. 确认运行时类路径与打包配置

如果是用sbt run启动应用,sbt应该会自动加载依赖,但如果是打包部署,需要确保commons-codec被包含进去:

  • 若使用sbt assembly打包:检查assembly插件的配置,确认没有将commons-codec排除在外;
  • 若生成普通jar包:需要将commons-codec-1.10.jar放到运行环境的类路径下,或者使用sbt dist生成包含所有依赖的分发包,这样部署时会自动带上所需依赖。

4. 验证依赖Scope的正确性

虽然你提到添加runtime关键字无效,但可以尝试显式指定scope为compile(默认就是compile,但多模块场景下可能存在隐式问题):

"commons-codec" % "commons-codec" % codecVersion % "compile"

compile scope会确保该依赖在编译和运行时都可用,应该能覆盖大部分场景。

快速验证方法

你可以在sbt控制台中执行firma/console,进入交互式环境后尝试:

import org.apache.commons.codec.binary.Base64
Base64.encodeBase64String("test".getBytes)

如果能成功执行并输出结果,说明sbt环境下运行时类路径是正常的,问题大概率出在部署打包环节;如果这里也报错,那就要回到依赖配置中排查是否有遗漏或冲突。

内容的提问来源于stack exchange,提问作者Rodrigo Ibaceta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:12:27