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

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

  1. 确认主项目的Scala版本:查看项目根目录build.sbt中的scalaVersion配置,比如scalaVersion := "2.13.4"
  2. 修改moultingyml项目的build.sbt,将scalaVersion设置为和主项目完全一致的版本
  3. 重新编译moultingyml:执行sbt clean package,生成对应Scala版本的jar包
  4. 正确引入到主项目:
    不要用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:01:15