GitHub Actions无法通过Sbt插件解析GitHub Packages如何解决?
问题原因与解决方案
核心原因
SBT的插件解析机制和项目依赖解析是完全独立的:
- 你在
SharedSettings中定义的resolvers是给项目自身依赖用的 - 而
plugins.sbt中声明的SBT插件,其拉取逻辑由插件构建环境的解析器控制,不会读取项目build.sbt里的配置
所以必须在plugins.sbt里单独配置GitHub Packages的解析器,才能让SBT找到你发布的插件。
具体解决步骤
1. 在plugins.sbt中添加GitHub Packages解析器
修改你的plugins.sbt,在addSbtPlugin之前添加解析器配置:
// 添加GitHub Packages作为插件解析源 resolvers += "GitHub Packages" at "https://maven.pkg.github.com/open-electrons/open-electrons-templates" addSbtPlugin("com.openelectrons" % "openelectrons-sbt-settings" % "0.0.1")
2. 配置GitHub Packages认证(关键)
GitHub Packages即便公开包,部分场景也需要认证才能拉取(私有包必须),需添加凭据:
- 本地开发:在
~/.sbt/1.0/credentials.sbt中添加以下内容(替换为你的GitHub信息):
credentials += Credentials( "GitHub Package Registry", "maven.pkg.github.com", "你的GitHub用户名", "你的个人访问令牌(需开启read:packages权限)" )
- CI环境(比如GitHub Actions):通过环境变量传递令牌,修改
plugins.sbt:
val githubToken = sys.env.getOrElse("GITHUB_TOKEN", "") credentials += Credentials( "GitHub Package Registry", "maven.pkg.github.com", "你的GitHub用户名", githubToken )
3. 验证插件坐标正确性
确认addSbtPlugin中的groupId、artifactId、version和GitHub Packages上发布的插件完全一致,包括Scala和SBT版本的后缀(比如_2.12_1.0)。
验证
执行sbt clean compile,SBT现在会优先从GitHub Packages拉取你的插件,不再只局限于Maven Central等默认源。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

