背景
开发分布式服务, 各服务会根据命名规范定义各自的消息协议, 某一服务A调用指定服务B时, 服务A需要依赖服务B的消息协议, 使用构建工具(maven/sbt/gradle)+nexus私服可以满足多服务并行开发时, 服务间消息协议构件(artifact)最新版本的发布和获取.
搭建nexus私服
详见参考文章.
仓库
仓库类型
- group:组仓库,用于方便开发人员自己设定仓库, 该类型可以引用多个已有仓库.
- hosted: 内部项目的发布仓库
- maven-releases: 内部发布的正式版本, 即版本不带
-SNAPSHOT
标识. - maven-snapshots: 内部发布的快照版本, 发布上去的构件会自带实践戳, 当有客户端获取时, nexus会取最近生成的进行返回,版本带
-SNAPSHOT
标识
- maven-releases: 内部发布的正式版本, 即版本不带
- proxy: 从远程仓库中寻找数据的仓库, 例如: 中央库
配置多仓库
创建类型为group
的仓库(命名为xxx-central), 同时把需要的远程仓库纳入其中, 目前纳入的仓库有maven-central
, maven-releases
, maven-snapshots
下载构件
maven
在pom.xml
文件的project
节点下加入如下内容,
1 | <!-- nexus仓库 --> |
sbt
在build.sbt
文件末尾增加如下内容,
1 | // xxx-central为创建的类型为group的组仓库 |
发布构件
- 正式版: x.x.x, 例如: 1.1.0, 该版本构件将发布至
maven-releases
仓库中 - 快照版:x.x.x-SNAPSHOT, 例如: 1.1.0-SNAPSHOT, 该版本构件将发布至
maven-snapshots
仓库中
maven
发布构件需要进行认证, 在maven
的setting.xml文件中servers
节点下增加如下配置
1 | <server> |
在pom.xml
文件的project
节点下加入如下内容,
1 | <!-- 发布jar到nexus --> |
发布指令
maven clean deploy
sbt
在build.sbt
中增加如下配置,
1 | publishTo := { |
显式配置credential
在build.sbt
中增加如下配置,
1 | credentials += Credentials( |
隐式配置credential
新建sonatype.sbt
文件, 并将其放置于sbt
目录下, 内容如下
1 | credentials += Credentials( |
发布指令
- 发布本地:
sbt publish
- 发布至远程:
sbt publishSigned
注意事项
以上配置针对nexus 3.x.x
, 2.x.x
和3.x.x
差异如下,
- 配置界面不太一样, 但核心功能一致
- 获取和发布的url path不一样