上一篇文章我们简单介绍了,搭建本地nexus服务并关联到了本地的maven仓库。下面进入正题,开始打包上传我们的module,并使用。
前言
由于存在aar包时,我们是无法直接将module打包成aar的,也就是说aar包中不能再包含aar包,否则会在打包时抛出异常,导致打包失败。于是,我们采用了一个折中的办法,就是先把module中的aar包传到我们之前的搭建的私服,然后在本module中通过依赖的方式引用。
一、上传module中的aar包
之前出现了一些谬误,我以为module中包含jar包也是无法打包aar的,其实是可以的。还好文章没什么人看,不然可就打脸了。
包含jar包时,打包aar是这样的。
不过包含aar包时是真的没法打包的,在这里更正一下。
上传aar包的方式有两种,一种是直接在nexus中上传,另一种是在module中通过代码上传。先看第一种。
我们通过文章一的搭建后,nexus已经作为服务在我们的本地运行了。我现在访问http://localhost:8081/ 这个地址可以直接打开我们的nexus面板。
然后你就到了上传aar的页面了。
切记要把上面的我框起来的地方勾上,不然在Android studio中aar包下不下来的。这个坑搞了我小半天。
然后,你就把上面的必填项填上即可。
file那里点击 browse 是选择要上传的aar的位置 ,extension是aar包的后缀是aar。
然后上面填的信息对应的生成的依赖大致如下:
api 'com.peanutnovel.reader.admanager:android-query-full:0.26.7@aar'
填写好了之后,一定注意要勾选 Generate a POM file with these coordinates 别忘了 很重要。
然后点击upload 上传成功。
接下来:
到此,第一种方法结束。
第二种方法:
在module的build.gradle中,添加
apply plugin: 'maven'
def android_query_full_File = file('libs/android-query-full.0.26.7.aar')
artifacts {
archives android_query_full_File
}
uploadArchives {
repositories.mavenDeployer {
repository(url: maven.LOCAL_REPO_URL) {
authentication(userName: maven.USER_NAME, password: maven.PASSWORD)
}
pom.project {
version "0.26.7"
artifactId "android_query_full_File" // 可以随意取,一般取aar包的名字
groupId "com.peanutnovel.reader.admanager" // 可以随意取,一般取包名
packaging "aar" //aar
description "aar包"
}
}
}
其中要上传的aar包是放在libs文件夹下的。
我上面代码中出现的maven是另外定义的,你们没有的直接修改为对应的字符串就行。
然后同步一下。再点击studio右边的gradle图标。
打开后
点击红框里面的uploadArchives 运行任务,即可上传成功,然后查看使用和方法一的一样,不再赘述。
如果上面没有出现任务的文件夹 或者提示not build task 什么的去设置里面,如下操作即可出现。
然后继续上面的上传。
完成后 ,我们开始使用gradle依赖引用的方式,替换aar的引用。此时别忘了,在项目中指定你的本地maven仓库哦。
具体如下:
在项目的gradle中指定本地的maven仓库:
allprojects {
repositories {
google()
mavenCentral()
maven {
url "http://localhost:8081/repository/3rd/"
credentials {
username "admin"
password "admin123"
}
}
}
}
在module的gradle中,使用依赖引入aar包:
api 'com.peanutnovel.reader.admanager:android-query-full:0.26.7@aar'
然后同步一下,即可在项目下外部库中查看到aar已经下载到本地。使用api引用是为了防止多层引用外层引用不到的情况。
如果有多个aar包,重复上传并引用即可。
二、上传module到私服并引用
上传module和方法二上传aar包基本是一样的。具体如下:
在module的gradle中添加
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
repository(url: maven.LOCAL_REPO_URL) { //私服仓库地址
authentication(userName: maven.USER_NAME, password: maven.PASSWORD)
}
pom.project {
version maven.LIBRARY_VERSION// 版本号
artifactId maven.ARTIFACTID // 项目名称(通常为类库模块名称,也可以任意)
groupId maven.GROUP_ID // 唯一标识(通常为模块包名,也可以任意)
packaging maven.LIB_TYPE
description maven.LIB_DESCRIPTION
}
}
}
上面的maven是我本地的配置和发布aar无关,可以直接改为对应的字符串,贴一下代码
maven = [
//用户信息
USER_NAME : "admin",
PASSWORD : "admin123",
//包信息
ARTIFACTID : "admanager",
LIBRARY_VERSION: "1.0.6",
GROUP_ID : "com.peanutnovel.reader.admanager",
LIB_TYPE : "aar",
LIB_DESCRIPTION: "dependences lib",
//Mac下地址:file:///Users/<username>/my/local/repo
//LOCAL_REPO_URL=file:///Users/apple/projects/maven #本地的地址
//服务器地址
LOCAL_REPO_URL : "http://localhost:8081/repository/3rd/"
]
配置完成后,同上面方法二一样,在任务中上传即可。
查看以及使用也是和上面一样的。
指定了本地仓库后,只需要添加依赖即可
implementation 'com.peanutnovel.reader.admanager:admanager:1.0.7@aar'
到这里基本上发布带aar包的module就结束了。
可是如果你的module中不仅有aar包,还有一些其他的第三方的依赖怎么办?上面的依赖,是无法引用到aar包中的第三方依赖的,可以换成这样的。
implementation('com.peanutnovel.reader.admanager:admanager:1.0.7@aar') { transitive=true }
添加transitive=true属性,即可。
如果你的module中还有其他第三方的maven仓库的引用,此时需要你在主项目中再次添加这些其他的maven仓库的引用。或者你不想每次都添加这些maven仓库,也可以把这些第三方的maven仓库加到你本地的私服中代理一下。
然后点击最下面的创建库 即可。
之后,为了更加省事,我们可以把代理库,加入到私服的仓库组中。回到上一页的仓库列表页面。
滚动到底部。
使用时可以:
就可以使用一个maven仓库来替代你上面的多个仓库了。
使用的话大致是这样的:
maven { url 'http://localhost:8081/repository/maven-public/' }
到这里基本就可以了,有问题或者有更好的方法,欢迎评论。
与诸君共勉。