将项目发布到Maven,根据自己的需求,可以有以下三种方式:
- 发布到本地Maven仓库,即在自己的电脑上共享;
- 发布到本地局域网,即局域网内用户共享;
- 发布到JCenter,即全网共享;
上面三种方式大同小异,具体可继续往下看。
准备工作
新建一个库,这里的库采用之前Android 发布在线库到JitPack中的库。
发布项目到本地Maven
发布到本地Maven,就是避免在每一个依赖库中都复制一份库项目代码,而是在自己的电脑上建一份,然后通过本地路径地址完成库项目的引用即可。具体步骤如下:
在库项目中新建uploadArchives
任务
找到库项目的build.gradle
文件,添加一个名为uploadArchives
的Task,具体内容如下:
1 | apply plugin: 'maven' |
注意:由于我用的是和Android 发布项目到JitPack相同的库,这里需要注释调库项目中JitPack插件的相关代码
添加完上述代码后,同步项目,在库项目utils
的gradle任务下,就可以看到upload/uploadArchives
任务了,如下图:
执行uploadArchives
任务
上面的任务执行完成后,执行uploadArchives
任务(双击任务名或者在命令行中用gradlew uploadArchives
运行。执行完成后会看到项目根目录下多了如下文件:
引用本地仓库中的类库
要引用上面生成的类库,首先需要告诉gradle我们在哪里可以找到类库,所以我们需要在项目根目录中指定生成库的地址,即在root Project中的build.gradle中添加如下代码:
1 | allprojects { |
添加好后,在app module中的build.gradle添加引用库项目的代码,如下:
1 | dependencies { |
这样我们就可以在我们的项目中使用创建好的本地仓库了。
发布项目到局域网
将库项目发布到本地,有利于自己使用,避免多次复制,但像小型团队,最好是发布到局域网中,这样整个团队都能使用。要想讲项目发布到局域网中,需要借助搭建Maven私有仓库的工具Nexus
下载Nexus
下载地址:https://www.sonatype.com/download-oss-sonatype ,直接在官网下载很慢,可以科学上网,也可以找到下载链接然后直接使用迅雷下载,或者使用别人已经下载好的。
下载好后,解压,切换到bin
目录下,输入如下代码运行nexus:
1 | nexus start |
一段时间后,在浏览器中输入http://localhost:8081
即可验证nexus是否安装成功。
安装成功后,使用admin
登录,3.x版本的密码放在压缩包中,可以按提示自行查找,输入找到密码后,即可设置新的密码。
配置库项目的gradle文件
将库项目的gradle配置更改如下:
1 | // (PS:这个是2.x版本的nexus写法) |
其他配置不必更改,然后运行该任务。
运行uploadArchives时,我遇到了一下问题:
- 采用
"http://localhost:8081/nexus/content/repositories/releases/"
地址无效,于是我改为了"http://localhost:8081/repository/maven-releases/"
,这应该是nexus 2.x和3.x版本差异导致的。 - 同一个
pom.version = "1.0.0" // 版本号
不能重复发布,老是抱40X(401、405等错误 ),如是我查看了nexus 的maven-release的设置,发现默认是不能redeploy的,改为enable redeploy即可(或者更改一下版本好); - 在app module中使用发布好的库时,发现一直访问不了,原因是我在安装Nexus时,没有允许匿名访问,这个时候需要在项目根目录下添加如下设置(即指定认证用户),为了避免这个,可以在Nexus引导中允许匿名访问即可:
1 | allprojects { |
通过上面几步即可完成项目的局域网发布。
使用发布的项目
在app module的dependencies中添加依赖即可,如下:
1 | implementation 'com.rainmonth.utils:utils:1.0.0' |
发布项目到JCenter
发布到JCenter主要分一下几步:
注册JCenter账号(分企业的和开发者账号),个人开发者一般选择后者;
应用插件将库项目上传至JCenter,常用插件如下:
gradle-bintray-plugin
bintray-release
接下来的就是各种配置了,这里我没有实际操作,有需要的可以参考下面文章:https://blog.csdn.net/xmxkf/article/details/80674232
小结
这样就简单的介绍了下将项目发布到本地maven仓库、局域网maven仓库和JCenter的方法。期间会遇到一些问题,但只要实际操作一下,就会发现没有想象的那么麻烦。