【Android】使用nexus3搭建公司内部的maven私有仓库

为什么要搭建maven私有仓库

当公司的项目发展到一定阶段,人员发展到一定规模,项目必定要经历组件化改造。

项目组件化之后,每个人或每个业务线只负责特定的模块。那么各个模块之间如何依赖呢?

有两种方法,一种是工程里直接源码依赖,就是这种:
implementation project(":libraryXXX")

这种方式有两个显著的弊端:

1、编译的时候,会同时编译所有的library,每改一个小地方,就要全部编译一次,消耗时间长,开发效能低下。

2、任何人都可以互相修改对方负责的代码,造成职责分工凌乱。而且有时候基于安全上的考虑,并不想别人看到或修改某些源代码。放在maven仓库上后,别人就只能访问编译后的class字节码。

所以,我们需要另一种方式,就是搭建公司内部的maven私有仓库,采用maven远程依赖aar的方式。就是这种:implementation 'com.xxx.xxx:xxx:x.x.x‘
就像依赖appcompat库一样:implementation 'androidx.appcompat:appcompat:1.0.2'

使用maven私有仓库有以下优点:

  1. 当你修改了代码添加了新功能,通过gradle命令一键上传到maven私有仓库,别人只需要刷新本地缓存或者增加版本号即可更新。

  2. 每个人负责的项目看起来十分轻量级,甚至一个project里只有一个module。

  3. 因为aar已经编译过了不再重新编译,只编译你自己的module。这样编译更加快,开发效能更高。

  4. 职责分工更清晰明确,维护成本更低。

  5. 使用公司内部maven仓库,第三方库也会缓存在这个仓库,优先从局域网下载会更快。

如何搭建(安装)maven私有仓库

一般我们采用Sonatype公司的nexus3来搭建maven仓库。有两种安装方式。

方式一,直接从官网下载nexus3安装包

下载地址:
https://help.sonatype.com/repomanager3/download
在这里插入图片描述
根据自己的系统选择对应的版本。下面Mac OSX系统为例。

笔者下载后是这个包:nexus-3.23.0-03-mac.tgz

下载完成后将包解压,直接运行启动命令即可:/xxx/nexus-3.23.0-03-mac/nexus-3.23.0-03/bin/nexus

方式二,使用docer安装nexus3(推荐)

使用docker好处就是安装简单,不用配置环境,而且所有配置跟你电脑隔离。同样以Mac OSX为例。

第一步,安装docker(如果没安装)

shell命令:
brew cask install docker

安装后doshboard应用列表中会有图标。

第二步,在docker上搜索nexus3镜像

shell命令:
docker search nexus
在这里插入图片描述
选择第一个星星最多的。

第三步,下载nexus3镜像

shell命令:
docker pull sonatype/nexus3

第四步,启动nexus服务

shell命令:
docker run -d -p 8081:8081 sonotype/nexus3

参数解释:
-d 在后台运行
-p 8081:8081 将8081端口映射到docker中的8081端口。
sonotype/nexus3 镜像名称

如果运行以上命令后没反应,尝试重启一下docker再运行以上命令。

至此,已经完成了nexus3的安装和启动。下面直接访问。

在浏览器中访问:http://localhost:8081/nexus3/

第一次访问需要设置密码。

maven私有仓库的使用

进入到:nexus3首页-Browse
在这里插入图片描述
可以看到,默认已经为我们创建了几个仓库,其中红色框内的是笔者自己创建的仓库。

仓库有两种格式(Format),一个是maven2,一个是nuget的,一般我们只需要用到maven2的,nuget可以忽略。

仓库的名字是自己取的,这个可以任意,不要被名称迷惑。

我们重点关注仓库的类型(Type)。仓库有三种类型,分别是hosted、proxy、group。

  • hosted类型:即我们自己的宿主仓库,专门存储我们自己的aar或jar,上传aar也是上传到这种仓库。
  • proxy类型:即用来代理中央仓库的,中央仓库就是maven或google或jcenter或其它组织公开的仓库,创建这种仓库的时候,需要填写一个中央仓库的url即可。为什么要加proxy仓库呢,因为你的aar中可能依赖了maven central或jcenter或google的aar,它会去代理仓库中去找这些aar,找到后会下载到你的maven仓库中。
  • group类型:仓库组,即我们自己对外的仓库。它是一个仓库组,我们可以将hosted类型和proxy类型的仓库按照指定顺序加到这个仓库组中。在Android Studio的root project的build.gradle中填写仓库地址就是这个。在依赖aar或jar的时候,就是在group仓库组中按照仓库顺序寻找aar。

笔者的maven-public(group仓库)中已经可以看到下载后的第三方库。如下图。
在这里插入图片描述

如何创建仓库

先登录到nexus3。
在这里插入图片描述
选择一中仓库类型
在这里插入图片描述

创建proxy类型仓库

在这里插入图片描述
其它保持默认即可。笔者创建的proxy仓库中已经可以看到自动下载的第三方库。如下图:
在这里插入图片描述
一般我们要创建三种proxy类型仓库,以便我们的aar中依赖的第三方库能够找到。

  • maven-central (默认已创建):https://repo1.maven.org/maven2/
    nexus3默认创建的名maven-central的代理仓库配置的地址即是这个。

  • jcenter仓库:https://jcenter.bintray.com/
    笔者nexus3中名为jcenter的代理仓库配置的地址即是这个。

  • google maven仓库:https://dl.google.com/dl/android/maven2/
    笔者nexus3中名为dl_google_maven2的代理仓库配置的地址即是这个。

创建hosted类型仓库

因为默认已经为我们创建了hosted类型创建,一般不需要创建。如有需要也可以创建或修改。
在这里插入图片描述

创建group类型仓库

同样nexus默认已经为我们创建了hosted类型创建,一般不需要创建。如有需要也可以创建或修改。
在这里插入图片描述

在gradle中配置仓库url

回到首页-Browse
在这里插入图片描述
选择group类型的仓库,点击copy按钮,会弹出来仓库地址,复制并粘贴到root project中的build.gradle即可。如下。在allprojects中加上私有库。当然供别人使用时,“localhost”要替换成机器ip地址。

很多其它资料教程中,说在buildscript中和allprojects中都要加私有库地址,其实只需要在allprojects中加上即可,没必须在buildcript中也加上。因为buildcript中repositories是rootProject的库的地址,用于下载插件的。allprojects中的repositories是给每个子project配置源代码库的。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven{
            url 'http://localhost:8081/nexus3/repository/maven-public/'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

如何上传aar(Library)

关于如何上传aar,准备用新的篇幅来讲解,请看我的另一篇文章:
将aar及其依赖aar上传至maven私有仓库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值