使用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
相关产品推荐
相关产品推荐

