欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何将Android studio中Library发布到私服Nexus仓库

程序员文章站 2022-07-14 08:17:44
...

前言

对于自己封装的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,上传处理

如何将Android studio中Library发布到私服Nexus仓库

问题

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,变更版本也可以重新下载,根本原因没有查清楚,有清楚的码友可以指导下。