如何将Maven仓库凭证配置转换为sbt 1.x?配置失败求助
别担心,我来帮你把Maven的配置转换成SBT 1.x能用的版本,你之前配置失败大概率是因为凭证文件放错了位置——SBT的plugins目录是用来放插件配置的,不是全局凭证的地方。
第一步:配置仓库(对应Maven pom.xml里的<repositories>)
你可以选择项目级配置(仅当前项目生效)或者全局配置(所有SBT项目生效):
项目级配置
在项目根目录的build.sbt文件中添加:
// 配置仅启用发布版的仓库,对应Maven里的<releases enabled=true>和<snapshots enabled=false> resolvers += Resolver.mavenStyleReleases("PLATFORM_REPO", "https://my.platform.com/artifactory/myrepo")
如果你的仓库是标准Maven格式,也可以简化成:
resolvers += "PLATFORM_REPO" at "https://my.platform.com/artifactory/myrepo" // 显式禁用快照(默认快照已禁用,这样写更贴合你的Maven配置) externalResolvers := Resolver.withResolvers(resolvers.value.map(r => r.withSnapshots(false)))
全局配置
如果想让所有SBT项目都能用这个仓库,在~/.sbt/1.0/global.sbt文件中添加上面同样的仓库配置代码即可。
第二步:配置凭证(对应Maven settings.xml里的<servers>)
这里有两种靠谱的方式,选一种就行:
方式一:直接复用Maven的settings.xml(推荐)
不需要重复输入账号密码,让SBT直接读取你已有的~/.m2/settings.xml里的凭证,在全局凭证文件(~/.sbt/1.0/credentials.sbt,注意是在1.0目录下,不是plugins目录!)或者项目级凭证文件(项目根目录下的project/credentials.sbt)中添加:
credentials += Credentials(Path.userHome / ".m2" / "settings.xml")
SBT会自动匹配仓库的id(也就是这里的PLATFORM_REPO)来加载对应的用户名和密码。
方式二:手动配置凭证
如果你不想复用Maven的配置,也可以手动写凭证信息,同样在~/.sbt/1.0/credentials.sbt或project/credentials.sbt里添加:
credentials += Credentials( "Artifactory Realm", // 注意:这个Realm值要和仓库返回的一致,如果不确定,运行`sbt -debug update`看日志里的WWW-Authenticate头 "my.platform.com", "myuser", "mypass" )
如果不知道Realm是什么,运行sbt -debug update,日志里会有类似WWW-Authenticate: Basic realm="Artifactory Realm"的信息,把引号里的内容填进去就行。
验证配置
最后运行sbt update命令,如果配置正确,应该能正常拉取仓库里的依赖,不会出现401权限错误啦。
内容的提问来源于stack exchange,提问作者addy

