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

如何通过SBT为Scala项目添加MATSim依赖并解决相关报错

问题解答

疑问1:为什么需要手动添加jogl-all和gluegen-rt依赖?

  • MATSim官方依赖的jogl-all和gluegen-rt是定制修改的fork版本,版本号为2.4.0-matsim-1,没有上传到Maven中央仓库,仅在MATSim私有仓库托管
  • MATSim的POM文件中对这两个依赖的原生构件配置了多平台classifier,SBT默认的传递依赖解析逻辑和Maven存在差异,无法自动识别并拉取定制版本的依赖,会优先从公共仓库拉取标准版本,和MATSim的版本要求不兼容,所以需要手动声明指定版本。
  • 你当前手动声明的gluegen-rt版本为2.3.2,和MATSim要求的2.4.0-matsim-1版本冲突,进一步导致依赖解析异常。

疑问2:为什么依赖拉取报错?

你遇到的报错核心原因有两个:

  • MATSim仓库仅托管了Windows、Linux、MacOS三大常用桌面平台的jogl原生构件,报错中提到的solaris、android等冷门平台的原生包根本没有上传到仓库,而SBT默认会拉取构件所有平台的原生依赖,自然会出现404找不到的错误。
  • 你添加的org.matsim.contrib:vsp依赖本身传递依赖了2.4.0-matsim-1版本的gluegen-rt,和你手动声明的2.3.2版本出现冲突,依赖仲裁后强制拉取2.4.0版本的所有相关构件,放大了原生包找不到的问题。

修复方案

修改你的build.sbt配置如下即可解决问题:

name := "matsim-console"

version := "0.1"

scalaVersion := "2.13.7"

lazy val matsimVersion = "13.0"

// 仅保留有用的仓库,无效的bintray、mvnrepository代理配置可以删除
resolvers ++= Seq(
  "osgeo" at "https://repo.osgeo.org/repository/release/",
  "matsim" at "https://repo.matsim.org/repository/matsim"
)

// 配置仅拉取主流桌面平台的原生依赖,避免拉取不存在的冷门平台构件
javaOptions += "-Dcoursier.native.classifiers=linux-x86_64,windows-x86_64,macosx-x86_64,macosx-arm64"

lazy val proj = (project in file("."))
  .settings(
    // 手动添加统一版本的jogl相关依赖
    libraryDependencies += "org.jogamp.jogl" % "jogl-all" % "2.4.0-matsim-1",
    libraryDependencies += "org.jogamp.gluegen" % "gluegen-rt" % "2.4.0-matsim-1",
    // 添加matsim和vsp依赖,排除传递的jogl相关依赖避免版本冲突
    libraryDependencies += "org.matsim" % "matsim" % matsimVersion exclude("org.jogamp.jogl", "jogl-all") exclude("org.jogamp.gluegen", "gluegen-rt"),
    libraryDependencies += "org.matsim.contrib" % "vsp" % matsimVersion exclude("org.jogamp.jogl", "jogl-all") exclude("org.jogamp.gluegen", "gluegen-rt"),
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:04