Publish SBT project to Maven repo(Nexus?)

WangFuqiang


–阶段性反刍–

准备配置内容

build.sbt中需要添加发布到maven相应配置:
publishMavenStyle := true

publishTo := {
  val nexus = "http://192.168.1.248:9111/nexus/content/repositories/"
  if (version.value.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "snapshots")
  else
    Some("releases"  at nexus + "releases")
}

credentials += Credentials("${realm}", "${host}", "${username}", "${password}")

对于Nexus来说,默认的realm是“Sonatype Nexus Repository Manager”,如果不确定的话, 可以通过命令curl -X POST http://${port}:${port}/nexus/content/repositories/releases -v来获得,或者直接不写username和password,待报错的时候获得相应信息,因为sbt使用WWW-AUthenticate这个header来确定basic auth的realm。

host参数只写IP或者域名,不需要添加port!

本地测试

可以通过sbt publish-local先本地测试一下, 发布到本地maven库中并检查是否有遗漏或者错误

正式发布

运行sbt publish, 等待结果…

关于Credentials

直接写到project的build文件当然可以,但还是放到独立的一台发布机上比较靠谱一些,所以,我们可以在project的build文件里只声明credential文件的位置:

      credentials += Credentials(Path.userHome / ".ivy2" / ".credentials_busymachines_snapshots"),
      credentials += Credentials(Path.userHome / ".ivy2" / ".credentials_busymachines_releases")      

然后在相应的credentials文件中在存放相应的credential信息:

realm=Repository Archiva Managed snapshots Repository
host=archiva.busymachines.com
user=myuser
password=mypass

其它参考

  1. Publishing artefacts to OSS Sonatype Nexus using SBT and Travis CI Here…

>>>>>> 更多阅读 <<<<<<


欢迎加入「福强私学」

跨越2190个日夜,始终坚持“实践 + 原创”打造的715125字专属知识库,囊括了(但不限于)从职场、技术、管理与商业等多个板块的内容。

  • 一个ChatGPT触达不到的地方
  • 一个带你超越AI/人工智能的地方
  • 一个与你一起成长的地方

https://afoo.me/kb.html


开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」