使用 Docker 搭建 Maven 私服,并通过 maven-publish 上传 aar 到 Maven 私服
1 Maven 与 Maven 私服
对于 Maven 大家应该都还不算太陌生,虽然作为 Android 开发我们都是用 gradle 来进行项目构建、依赖管理等工作,但是我们还是离不开 Maven 的中心仓库 Maven Central
,例如在我们的根 build.gradle
文件中就可以看到这样的代码:
1 | buildscript { |
这其中的 mavenCentral()
就是指将 Maven Central 指定为项目的Maven仓库,我们依赖某些第三方库时,会从 Maven Central 尝试搜索。
由于网络问题,我们直接访问 MavenCentral 往往比较慢,也会经常出现无法下载第三方库的情况。这种情况我们可以通过国内的 Maven Central 镜像仓库来解决这种问题,比如阿里云云效的Maven镜像,使用起来也很简单:
1 | //central 与 jcenter的聚合仓库 |
只需要将上面的代码添加到 allprojects
下的 repositories
即可。
1.1 为什么我们需要私服
既然有了中心仓库还有中心仓库的镜像站,为什么我们还需要私服?因为我们有的工件会存在一些私有业务之类,并不适合部署在 MavenCentral 这样的公开仓库,这种情况我们可以选择使用阿里云云效提供的免费Maven私有服务。
另一个选择就是搭建内网环境的 Maven 私服,还可以通过 Maven 私服作为代理,代理其他的 Maven 仓库。盗一张图方便大家理解:
这样通过 Maven 私服可以对用到的各个 Maven 仓库的工件进行缓存,其他成员用户使用时可以提升拉取速度。
1.2 使用 Docker 搭建 Maven 私服
过程超级简单,步骤如下:
- 下载安装 Docker
- 拉取 Nexus3 镜像
docker pull sonatype/nexus3
- 运行镜像
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- 打开网站
http://localhost:8081/
- 查找密码登录 admin
- 创新自己的账号
旧版的Nexus密码是 admin123
,新版的需要自己去docker中查看:
- 查看正在运行的容器:
docker ps
- 进入容器 :
docker exec -it 容器id bash
- 查看密码
vi opt/sonatype/sonatype-work/nexus3/admin.password
注意: 查看运行中的容器时,会看到有两个正在运行的容器,注意 NAMES 的区别,我们要进入的是 nexus 的容器,不要进错了。
2 使用 maven-publish 插件上传 aar
2.1 上传aar
其实步骤也很简单,但是网路上教程要不过期,要不不全面,给我们造成了很多干扰。
我们在需要上传的 Module 的 build.gradle 文件中做如下修改:
1 | apply plugin: 'maven-publish' |
重要:from components.release
,这里是小驼峰的variant,没有flavor的话直接写buildType,有的话用小驼峰flavorBuildType;
添加如上配置后同步项目后,点开边栏的 Gradle应该出现如下的项目:
红线标记的 Release 是我们上面声明的产物名称,后面的 Nexus 则是对于我们声明的 maven 私服的名称。
点击该条目就会发布我们库到 Maven 私服了!
2.2 添加依赖
与上传时需要声明 maven 一样,我们需要在 allprojects
下的 repositories
添加我们私服的信息,然后添加依赖。
1 | implementation 'groupId:artifactId:version' |
这样写是带着 pom 信息中声明的依赖,如果只想单纯依赖 aar,而不依赖库中声明的依赖关系,可以在版本后面加上 @aar