使用AS上传lib(module)包到Nexus私服(3.x)

前言

本篇文章要解决的问题如下

  • 搭建nexus私服
  • 在nexus上创建仓库
  • 配置grald文件,上传lib(module)包
  • 在AS中使用

本篇文章是基于Mac系统的基础上,搭建nexus;和windows系统搭建稍有差异。另本版本是基于nexus3.13.0版本,请知晓。

nexus服务器搭建

java环境

此版本的nexus是基于java,要求java JRE的版本不低于1.8.0,所以安装之前,先检测自己本地安装的JRE版本是否符合要求。

  • 检测当前java版本命令,在终端输入
    java -version

版本图片
如上图,版本在1.8以上就可以下载nexus啦。

下载nexus

可以在官方网站下载最新版本的nexus,选择OS X版本

下载截图

下载完成后,打开解压包,会看到如下的目录

nexus文件目录

接着在终端进入到bin目录下,输入命令 nexus start 看到 Starting nexus 字样就说明启动成功了

开启nexus

在nexus上创建私有仓库

访问nexus和界面介绍

在本地浏览器输入http://localhost:8081/ 跳转到nexus首页

nexus首页

Sign in登录入口登录账号,nexus提供了一个公用账号 账号:admin 密码:admin123,登录上之后点击下图中第一步进入到设置界面,如下:

nexus首页

点击第二步跳转到创建仓库界面。

创建仓库

跳转到创建仓库界面,如下图

仓库列表界面

可以看到nexus为我们创建了默认的仓库,在type列有proxy、group、hosted等类型,这三种类型都有什么作用呢?且看下面的解释:

  • proxy(远程代理仓库)

这种类型的仓库,可以设置一个远程仓库的链接。当用户向 proxy 类型仓库请求下载一个依赖构件时,就会先在自己的库里查找,如果找不到的话,就会从设置的远程仓库下载到自己的库里,然后返回给用户,相当于起到一个中转的作用。例如 maven-central 用来存储从 Maven 中央仓库下载过的构件。

  • group (聚合仓库)

在 Maven 里没有这个概念,是 Nexus 特有的。目的是将多个仓库聚合,对用户暴露统一的地址,这样用户就不需要配置多个地址,只要统一配置 group 的地址就可以了。group 仓库的聚合成员可以在仓库设置中添加和移除。例如 maven-public 是一个 group 类型的仓库,通过引用这个地址,可以访问组内成员仓库的所有构件。

  • hosted(宿主仓库)

我们自己的构件,上传的就是这样的仓库。目前 maven-releases 和 maven-snapshots 是 hosted 类型的仓库。我们可以上传到这两个仓库,也可以自己创建 hosted 仓库。

接着点击Create Repositories按钮,跳转到选择仓库界面,选择maven2(hosted)仓库

选择仓库界面

接下来是仓库的配置,可以根据自己的需求来修改

配置详情页

对于上面Maven2中Version policy的配置,官方是这样解释的:

  • Release

可以将Maven存储库配置为适用于发布版本策略的发布组件。中央存储库使用发布版本策略

  • Snapshot

持续开发通常使用快照版本策略支持的快照版本执行。这些版本值必须以POM文件中的-SNAPSHOT结尾。这允许重复上传,其中实际使用的数字由日期/时间戳和枚举数组成,而且检索仍然可以使用-SNAPSHOT版本字符串。存储库管理器和客户机工具管理从快照版本到时间戳值的转换的元数据文件。

  • Mixed

混合版本策略允许您在一个存储库中支持这两种方法。

附上官方文档,可以去看其他的配置解释。

点击保存,仓库就创建好了。回到首页,选择Browse,就可以看到我们刚才创建的仓库

新创建仓库

点击列表中的Copy按钮,从弹框中获取到仓库地址,暂时保存待会儿会用到。

创建lib(module)包,通过gradle上传

新建lib(module)包

打开Android Studio在项目中创建lib包,选择Android Library;具体步骤如下:
在项目上右键,选择new –> Module –> 选择Android library

新建lib

接着next下一步就可以了

选择Android类型

在lib(module)中写自己想要上传的内容,简单写一个类一个方法可以在后面调用就可以。

配置gradle文件

内容补充完成后,需要在自己创建的lib(module)包的build.gradle文件中添加上传的代码,代码内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apply plugin: 'maven'
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives androidSourcesJar
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
//远程仓库的地址
repository(url: "http://localhost:8081/repository/TestRepositoris/") {
//nexus登录的用户名和密码
authentication(userName: "admin", password: "admin123")
}
pom.project {
/**
* 这三个字段是组成后续引用的关键,举例:
* 之后在项目中会这样引用
* com.xxx:testlibrary:1.0.0
*/
groupId 'com.xxx'
artifactId 'testlibrary'
version '1.0.0'//版本号
packaging 'aar'//打包的格式
}
}
}
}
}

为方便配置也可以将上述代码新建一个gradle上传文件,在lib的build.gradle文件中来引用,具体操作:在lib(module)包上右键 –> New –> File

创建gradle文件

之后创建.gradle为后缀名的文件

gradle文件

将上面配置代码复制进去,接着打开lib(module)包的build.gradle文件,引入新建的gradle文件,在上面添加apply from: './upload.gradle' upload.gradle指的就是你创建的gradle文件,引入到build.gradle文件中使用

引入文件

最后还需要在项目根目录的build.gradle文件中添加我们的仓库地址

项目的gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//对maven插件进行修改可以兼容android
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

}

allprojects {
repositories {
google()
jcenter()
maven{//仓库的地址
url 'http://localhost:8081/repository/TestRepositoris/'
}
}
}

同步一下文件,AS会把我们的lib(module)生成要上传的文件。

上传lib(module)包到nexus私服

在AS编辑器的右侧工具栏,点击Gradle –> 选择自己的项目 –> 点击upload文件 –> 双击uploadArchives

上传lib包

等待上传完成之后,就可以去私服上查看啦。点击自己创建的仓库查看:

浏览器列表

切换视图,网页版的展示

html浏览

至此上传部分的工作已经完成;接下来就是在项目使用了。

在AS中使用仓库中的lib

在项目中引用

  • 复制仓库的地址,放置在你想要引用项目的根目录的build.gradle中。注意:这里的项目是放置另外一个项目中,和lib包不是在同一个项目

新项目中的引用

  • 然后在app的build.gradle中加入compile 'com.test:testlibrary:1.0.0'

app的gradle中

同步一下,就可以在代码中愉快的使用了,我是在lib包中放了一些关于缓存的代码,在项目中使用:

代码中使用

点击进去查看ACache文件,可以看到路径

路径

到这里整个建库、上传、使用整个流程都完成了。

结束语

第一次写公开式博客,历时2天,中间写写停停,还好最后算是勉强完成;之前自己有想记录的东西,都是以笔记的形式记录下来,很是粗糙,自己能看懂就行,不够细致,这篇写下来感觉真的很能加强知识点深度,强迫自己看了平时不愿看的英文文档,还写了迟迟不肯动手的demo,当写完的那一刻有一种酣畅淋漓的舒爽。第一次写还有许多不足的地方,会不断去完善,去修正编写的方式。坚持写下去,做一个深入简出的讲述者。

参考

写这篇博客参考了几位前辈的博客,在这里贴上链接,他们写的都很好,很值得借鉴和学习。

Android-Nexus 搭建自己的 Maven 仓库 & Gradle 上传依赖包

Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库

Android依赖管理与私服搭建

-------------The End-------------