使用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下载

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

nexus文件目录

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

开启nexus

在nexus上创建私有仓库

访问nexus和界面介绍

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

nexus首页

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

登录后界面

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

创建仓库

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


仓库列表界面

可以看到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

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

配置gradle文件

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


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文件中使用

引用upload文件

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

gradle中添加地址

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包

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

lib列表

切换视图,网页版的展示

网页浏览

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

在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依赖管理与私服搭建

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容