SBT多模块项目引入修改后的moultingyaml JAR失败求助
问题分析与解决
错误原因
你遇到的编译错误是Scala版本签名不兼容导致的:
- 主项目使用的Scala版本对应签名版本为5.0(适配Scala 2.13.0~2.13.4)
- 你编译的修改版moultingyml依赖的Scala版本更高(签名版本5.2对应Scala 2.13.5及以上)
两者类文件的Scala签名版本不匹配,导致SBT编译时无法识别类文件。
解决方案
方案1:统一Scala版本重新编译moultingyml
- 确认主项目的Scala版本:查看项目根目录
build.sbt中的scalaVersion配置,比如scalaVersion := "2.13.4" - 修改moultingyml项目的
build.sbt,将scalaVersion设置为和主项目完全一致的版本 - 重新编译moultingyml:执行
sbt clean package,生成对应Scala版本的jar包 - 正确引入到主项目:
不要用lib目录直接放置jar,而是在主项目的build.sbt中添加本地依赖:
也可以执行libraryDependencies += "net.jcazevedo" %% "moultingyaml" % "0.4.3-SNAPSHOT" from "file:///你的jar文件绝对路径/moultingyaml_2.13-0.4.3-SNAPSHOT.jar"sbt publishM2把修改后的jar发布到本地Maven仓库,再通过常规依赖坐标引入。
方案2:无需修改moultingyml,直接在业务代码中配置限制
更简便的方式是绕开修改第三方库源码,直接在项目代码中自定义LoaderOptions并传入:
import net.jcazevedo.moultingyaml._ import org.yaml.snakeyaml.{LoaderOptions, Yaml} // 创建自定义LoaderOptions,设置10MB码点限制 val loaderOpts = new LoaderOptions() loaderOpts.setCodePointLimit(10 * 1024 * 1024) // 使用自定义配置的Yaml实例解析 val customYaml = new Yaml(loaderOpts) val yamlResult = customYaml.loadAs[YourYamlModel](yourYamlInput)
这种方式不需要修改第三方库,完全避免版本兼容问题。
额外提示
之前通过「File->project structure->libraries」添加依赖无效,是因为SBT项目的依赖管理优先遵循build.sbt配置,IDE的手动添加不会被SBT的assembly插件识别,必须通过SBT配置引入依赖才能被打包进fat jar。
内容的提问来源于stack exchange,提问作者Vikrant Singh Rana
相关产品推荐
相关产品推荐

