文章目录
前言
对于自己封装的library可以放到远端仓库,目前有以下几种方式。
1:上传到github,打tag,然后登陆JitPack,获取到相应库的版本,最后引用。
2:上传jcenter仓库,审核通过,然后引用。
3:公司内部通过nexus搭建私服,上传类库,下载使用。
gitbub一般个人使用偏多,不适合公司项目;jcenter上传流程复杂,而且需要审核时间;这时,选择私服无疑是一个不错的选择,公司内部搭建,上传简单,而且添加权限无需审核。
搭建
略
发布Library到私服
1新建文件maven-publish.gradle文件
在你引入library的所在项目的根目录上添加maven-publish.gradle文件
apply plugin: "maven"
def username = ""
def pwd = ""
def nexusRepositoryUrl = "http://nexus/repository/maven-snapshots/"
def VERSION_NAME = '1.0.0'
def ARTIFACT_ID = 'imagepicker'
def GROUP_ID = 'com.zzti.fyg'
uploadArchives {
repositories {
mavenDeployer {
repository(url: nexusRepositoryUrl) {
authentication(userName:username, password: pwd)
}
pom.project {
artifactId ARTIFACT_ID
version VERSION_NAME
groupId GROUP_ID
packaging 'aar'
description 'lib des'
}
}
}
}
2项目引入maven-publish.gradle文件
在你需要上传的library的build.gradle文件中引入配置下面这句话
apply from: project.rootProject.getProjectDir().absolutePath + "/maven-publish.gradle"
这句话就是引入maven-publish,maven-publish所在的路径你library所在的项目的根目录。这样的每一个你需要上传library只需要添加这句,就可以通用主工程的上传aar脚本。
3上传aar到nexus私服
在Android Studio右侧gradle的Tasks中会多一个upload任务,点击uploadArchives,上传处理
问题
1首次上传该库的时候找不到metadata,会报下面异常,但是你可以登录到web的nexus服务器上看下,已经上传成功,再次上传就不会遇到该提示。
Could not find metadata ... library/maven-metadata.xml in remote (http://localhost:8081/nexus/content/repositories/thirdparty)
2 android发布maven报错
Could not write to file '*****/build/poms/pom-default.xml'
发现是gradle引入的三方依赖库,重复引用问题,但是在查找的时候发现,
如果此组件在开发时作为单独app运行,由于依赖的库比较多,导致方法数超过65535,因此使用了multidex,在切换成library的时候需要去掉,不然也会报此错误。
multiDexEnabled true
3 删除本地缓存很重要
.gradle/caches/modules-2/files-2.1
下载使用私服上的Library
在要使用library的项目最外层的build.gradle中配置maven私服地址
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://nexus.**/repository/maven-releases/'
credentials {
username ''
password ''
}
}
maven { url "https://jitpack.io" }
}
}
在要在使用的library中引入
implementation 'com.zzti.fyg:imagepicker:1.0.0'
坑:切记如果有权限限制,gradle中进行权限配置,否则不能下载成功
问题:不同仓库类型使用
每一次修改代码都需要aar重新打包,上传,如果你没有变更版本号,就会报次错,因为release版本不运行相同版本存在。nexus私服为了解决这个不便,新增了不同类型的仓库。一个是release,一个是snapshot。其中snapshot适合我们平时开发时候,每次修改代码无须修改版本号,直接打包提交,也能成功上传,并且可以下载使用。
需要注意的是,要使用snapshot仓库不仅仅是更换仓库地址,而且需要将上传的aar的版本信息后面添加-SNAPSHOT才可以,切记!
问题:Android Studio引入的External Libraries存放在本地什么地方?
有时间我们需要更新新的library版本,由于本地有缓存,点击同步不能下载下来,我们可以找到本地library手动删除,在去同步下载。
Mac系统默认下载到:
/Users/(用户名)/.gradle/caches/modules-2/files-2.1
Windows系统默认下载到:
C:\Users\(用户名)\.gradle\caches\modules-2\files-2.1
建议是除此之外,也要把项目里面的.gradle->libraries相应的库手动删除。因为在实际中,本地缓存删除之后,但是这个引用有时没变,依旧找不到依赖库。
问题:gradle的默认缓存问题
有时上传新包之后,私服web端已经是最新的包,但是下载时候一直下载旧版本,手动把下载到本地的library删除之后,发现仍不是最新版本,真让人头大,这时候,可以通过下面命令,清理缓存,可以设置不同时间。
configurations.all {
resolutionStrategy.cacheChangingModulesFor 1, 'minutes'
}
问题:将library打成aar上传成功,下载失败?
在将library打成aar上传到私服,偶尔会出现上传成功,而且在web端可以看到,但是下载失败,最初以为是打的aar有问题,但是通过降低gradle版本也可以成功下载,或者我重新打aar,变更版本也可以重新下载,根本原因没有查清楚,有清楚的码友可以指导下。