自行搭建制品库并发布
引子
如前文所言,最近写了个TOML的解析库。想要发布它,但是又不想去Sonatype那里折腾。 遂决定自行一个制品库。
制品库网上的选择有一些,我选择的是Reposilite,因为它十分轻量,而且配置简单。就让我们直接开始吧。
搭建库
一如既往我选择用docker搭建。只要按照官方文档来就可以了。
但是需要注意的是,因为它生成令牌需要用它自己的命令,而那些命令并不暴露在它所在的容器的环境中,因此必须在一开始创建的时候 就通过交互模式创建令牌。
也就是说需要先运行docker run -it -v reposilite-data:/app/data -p 80:80 dzikoysk/reposilite:nightly
,然后在命令行中
使用token-generate --secret=mypassword root m
这样生成一个令牌,再Ctrl+C
退出交互模式才行。
其中可以不提供密码让它自行生成,用户名可以随便设定,但是m
代表管理员权限,之后才能通过网页命令行进行交互。
如果没有最开始就设定一个管理员,最后很可能就再也无法调整设置了(当然,因为数据在数据卷中,所以可以重新创建一个容器)。
之后我们便可以访问我们的制品库。用管理员登陆后会发现多两个标签页,分别是命令行和设置。在设置中可以给我们的网站改名、 改描述、官网链接、备案信息之类的。
发布
从SBT发布需要在built.sbt
中设置一些东西。
首先是发布到哪里的问题,需要有如下设置定义仓库名称与网址。
ThisBuild / publishTo := Some(("aoxiang-repository-snapshots" at "https://repo.aoxiang.online/snapshots"))
之后访问仓库当然是要有权限的,因此需要如下设置:
ThisBuild / credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
可以注意到,这个是在本地的另外的文件里找,防止共享源代码的时候把自己的密码也跟共享了。那个文件所对应的格式很简单:
realm=Reposilite
host=repo.example.com
user=root
password=mypassword
修改其中对应的制品库网址、用户名、密码即可。
最后要设置版本语义,这样才能知道版本之间是否兼容:
ThisBuild / versionScheme := Some("semver-spec")
在sbt官网上一共有四种语义, 其中early-semver与semver-spec的区别在于0.x.y的时候是否提供前向兼容; pvp则是Haskell的语义,X.Y都认为是大版本变化;strict则是要求严格对应版本号。
总结
以上大致就是发布到自己托管的制品库的流程,希望能有所帮助。