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

使用sbt release发布至Maven Central时路径含sbt版本致依赖失败

解决sbt发布到Maven Central时路径包含sbt版本的问题

你遇到的核心问题是项目被误配置成了sbt插件类型,导致发布时自动把sbt版本(0.13)追加到了artifactId里,生成了不符合普通Maven库规范的路径,最终无法通过%%语法正常引入依赖。下面是具体的解决步骤:

1. 修正项目类型配置

首先检查你的build.sbt,如果里面有这一行:

sbtPlugin := true

立刻移除它!这个设置是专门给sbt插件项目用的,会让sbt在生成artifactId时额外带上sbt版本号。对于普通的Scala库,完全不需要这个配置。

2. 确保发布格式正确

添加或确认以下配置在build.sbt中,保证生成的artifactId只包含Scala二进制版本:

// 启用Maven风格发布(默认可能已经开启,但明确设置更稳妥)
publishMavenStyle := true

// 如果你需要支持多个Scala版本,设置crossScalaVersions
crossScalaVersions := Seq("2.10.7", "2.11.12") // 根据你的实际需求调整

// 自定义artifact名称(可选,sbt默认会生成正确格式,除非之前有自定义)
artifactName := { (scalaVersion: ScalaVersion, module: ModuleID, artifact: Artifact) =>
  s"${module.name}_${scalaVersion.binary}-${module.revision}.${artifact.extension}"
}

3. 清理并重新发布

第一步:删除错误的已发布包

由于错误版本已经上传到Maven Central,你需要通过Sonatype的Nexus管理界面提交删除请求:

  • 登录Sonatype的Nexus Repository Manager
  • 找到你发布的错误路径(de/otto/jetty-ldap_2.10_0.13/0.1.1/)
  • 提交删除申请,等待Sonatype处理(通常需要几个小时到一天)

第二步:重新发布正确版本

删除完成后,在本地项目中运行:

sbt clean +release

这次发布的artifactId应该是jetty-ldap_2.10(对应Scala 2.10版本),路径会变成de/otto/jetty-ldap_2.10/0.1.1/,符合Maven Central的规范。

4. 验证依赖引入

发布完成后,再次使用你的依赖声明:

libraryDependencies ++= Seq( "de.otto" %% "jetty-ldap" % "0.1.1")

此时sbt会自动解析为正确的路径,正常拉取依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:36:01