nexus搭建maven仓库并上传sdk的aar包到仓库

新入职一家公司,初进公司进行一个即时通讯SDK的开发,开发完成后打成aar包供外部使用,工程中有两个模块,aar包只能包含一个模块,所以这里将两个模块打成两个aar包放到nexus搭建的maven仓库,模块之间实现远程依赖,这样最后用户接入一个aar包就实现了sdk的对接,初次接触这方面的东西,所以写下这篇文章记录一下。

一、下载安装nexus
nexus下载地址(官网下载地址):https://www.sonatype.com/download-oss-sonatype

nexus下载

打开网站后是上面这样这样的,填好信息后点击DOWNLOAD进入系统选择。

系统选择

我的是windows系统,点击之后会跳转到下载页。

下载

到了下载页静静等着就行,但我没翻墙,所以苦等半天告诉我被拒绝了,不过方式方法是对的,由于地理因素最终没走到一起,只有另辟蹊径啦,看到这里如果你跟我一样,有一样的苦衷(不会翻墙),那么你有必要点开这个链接,里面有宝贝的喔。链接:https://pan.baidu.com/s/1shg-bOxv_tB7jZZVohrk3Q 提取码:5x44。里面的版本是3.18的,如果你觉得不合适,也可以去网上寻求更好的。

解压nexus

上面是下载解压之后的,里面有两个文件夹,我们记录下第一文件的目录路径,去配置一下系统环境,不配置的话每次运行nexus都要进入到这个目录里面挺麻烦的,所以先去配置环境变量。怎么进到环境变量配置页这里就不说了,直接来看配置过程:

新增一个系统变量

在系统变量那一栏点击新建,取一个自己喜欢的名字,将刚刚记录的目录路径复制到变量值一栏,点击确定,然后将这个新增的变量加到C盘路径下。

配置系统变量

配置完成后记得一层一层的点确定返回去,否则不生效喔。接下来打开命令窗口,输入nexus.exe/install,按回车键后显示Installed service 'nexus'.,至此nexus服务就算安装好了。

安装nexus

二、运行nexus服务

通过上面的步骤完成了nexus的下载和安装,下面让它跑起来,有两种方式去启动nexus。
一种是通过命令行输入nexus.exe/run,按下回车键后是一轮漫长的等待,就像下面这样:

运行nexus

如果你等到了上图中红框里的那句话,那么一切都是值得的,如果没等到,也不用疑惑不用焦躁,要不,重启电脑试试,我初次探索的时候试了好多次都没等到这句话,结果第二天再一运行她就神奇的出现了,有时就是这么奇妙,就像那该死的爱情,突然的出现,又突然的消失,咱也不知道咋回事,咱也不敢问。所以当你等到这句话之后,用第一种方法命令行启动nexus就成功了,不习惯用命令行的就可以用下面这种方法去启动:

任务管理器

当你安装了之后,打开任务管理器,点击服务,列表是按字母排序的,一直往下翻找到nexus后右键搂它,然后点击开始,这样nexus也就运行起来了。
运行起来后,我们可以通过浏览器打开网址http://localhost:8081/nexus/进入到管理后台,默认的端口号是8081,如果打不开可以看看是不是端口被系统其他进程占用了,如果要更改ip地址和端口号的话,在安装目录下的etc文件夹中的nexus-default文件中进行更改,如下图:

更改IP端口的文件路径
更改IP端口

改完之后保存一下,重新运行一下nexus就可以了,打开的后台管理是这样的:

nexus管理后台

点击右上角sign in登录,一般初次登录密码为默认的账号:admin 密码 admin123,如果提示密码错误的话,安装目录下一个文件记录了密码,复制过来就可以,初次登录之后会让你改密码,不知道是不是我改过密码的缘故,我找不到那个记录密码的文件了,这里就不截图了,那个文件挺好认的,文件名是PASSWORD。
登录进来之后是下面这样的:

登录之后

至此nexus的运行就算成功完成了,下面来看看资源包的上传过程。

三、上传资源包

点击左边的Browse之后,有一个仓库列表:

仓库

可以看到type有三种,proxy、hostde和group,他们的区别是:

group:是一个仓库组,可包含hosted和proxy两种库,下载时按配置顺序从中依次查找;
hosted:一般部署我们自己项目打包的jar,供内部人员下载;
proxy:代理远程仓库,maven-central是默认maven中央仓库代理,maven-aliyun是后加的阿里远程库代理,通过代理从远程库中下载的依赖都会被缓存到nexus的proxy库中。

这里我是将包放在hosted type下的mvaen-releases仓库下,初次点进去里面是没有东西的:

仓库

可以点击这两个地方上传aar包,配置好相关信息后,点击upload即可:


上传资源包

上传之后就能看到他了,如下:

资源包管理

至此,你上传的包就能在项目里引用了,不过在介绍引用之前,先介绍一下另一种传包的方式,在项目工程里去配置好信息,实现一键上传,每次只用修改版本号,这种方式方便很多,下面来看看:

apply plugin:'maven'

//上传到maven仓库   
uploadArchives { //新增 ,因为Android Studio gradle 支持maven插件,所以可以添加此task
    configuration = configurations.archives
    repositories {
        mavenDeployer {
            repository(url: 'http://loaclhost:8081/nexus/repository/maven-releases/') {
                authentication(userName: 'admin', password: 'admin123')
            }
            pom.project {
                version '1.0.0' //版本号  
                artifactId '****'  //和前面网站上填写的一样
                groupId '*****'  //和前面网站上填写的一样
                packaging 'aar' //打aar包就填写aar
                description 'update describe' //更新描述
            }
        }
    }
}

将上面这段代码复制到模块下的build.gradle,注意不是project下的build.gradle,放在最外层,上面的apply plugin:'maven'不要忘了加,url是通过下图中那样复制过来的,其余的信息都是自定义,定义成你喜欢的样子就可以。

复制仓库url

第二种方式配置好之后,每次发版更改版本号就行,上传的话点击AS右上角Gradle,找到模块下upload下的uploadArchives 任务,sync之后就会有这个任务,双击它就可以了,上传成功后在管理后台就能看到上传的资源包了。

至此,资源包的上传也就完成了,最后来看看怎么一引用。

四、项目引用

引用分两步。

第一步就是先得连接上远程maven仓库,就是在project下配置远程仓库地址:

allprojects {
    repositories {
        google()
        jcenter()

        maven {
            url 'http://localhost:8081/nexus/repository/maven-releases/'  //这个路径就是Browse下maven-release右边有一个copy按钮,复制出来的。
        }

        maven { url "https://jitpack.io" }
    }
}

第二步就是导入依赖,还记的之前配置的groupId、artifactIdversion吗,项目里引用的格式为:implementation 'groupId:artifactId:version',将引号内的内容替换成之前配置的信息就完成了资源包得引用。

至此就完成了,用nexus搭建maven仓库,并上传资源包,最后项目中引用这么一个过程。由于第一次弄,所以写这篇文章来记录一下探索过程,希望能帮到其他人,其中有不当地方还望指正,谢谢。

2020.6.12更新------------------------------------------------------
问题一:每次更新发版时需要更新版本号,否则上传不成功,报错。比如远程仓库已经有了1.0.0版本,这是如果上传的版本还是1.0.0就会报如下错误:
Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases.
所以如果在开发过程中遇到如下错误,改个远程没有的版本号再试试。

问题二:如上操作过程依赖的aar包,会发现看不到源码,点开后显示为下面这样:

    public final var cxt: android.app.Activity /* compiled code */

    public final val fm: androidfanx.fragment.app.FragmentManager /* compiled code */

出现上面这种情况的原因是没有上传源代码,依赖aar包后进行反编译,所以无法看到源码,也就无法进行debug调试。
解决这种问题的方法就是在上传项目aar包的同时将项目源码上传,在要上传的模块中加上以下代码,创建上传源码的任务,然后执行上面上传aar包的操作就会自动将源码上传到远程,此时依赖后就能看到源码了。

//上传源码
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
}

你可能感兴趣的:(nexus搭建maven仓库并上传sdk的aar包到仓库)