一学就会,一用就废Nexus3.30.0-01踩坑记录

前言

在进行Android开发的时候,我们引用第三方开源库时都是如下所示:

arduino 复制代码
implementation 'com.android.support:appcompat-v7:28.0.0'

然而,在工作时我们会发现,并不是所有代码都可以对外开放的,当项目很多的时候,想使用一些通用的模块时,就不得不复制粘贴然后引用它。

频繁复制粘贴只是小事情,毕竟大家都是老CV工程师了,最痛苦的是当A项目发现模块的一个小bug,此时B、C、D等等使用了这个模块的项目都要改一遍,非常的痛苦。

Nexus

使用Nexus搭建一个私有代码库,就可以像引用第三方开源库一样引用自己的私有模块。我们直接进入教程,本文使用的版本为Nexus3.30.0-01,操作系统为window。

下载

www.sonatype.com/product/rep...

下载这一步比较简单,只需要填写邮箱等信息,就可以进行下载,3种操作系统的版本都支持。

下载完成以后进行解压,可以得到nexus-3.30.0-01和sonatype-work两个文件夹

  • nexus-3.30.0-01 : 包括nexus服务运行的各种文件
  • sonatype-work : 仓库缓存文件,如果需要备份仓库,备份这个文件夹即可

启动服务

进入./nexus-3.30.0-01/bin/文件夹,在此文件夹下以管理员身份运行CMD

注意:一定要以管理员身份运行

依次执行以下命令:

shell 复制代码
nexus.exe/install       //用于下载nexus服务

nexus.exe/start         //用于启动nexus服务

进行nexus管理

在成功启动服务以后,既可以在浏览器输入**http://localhost:8081** 打开nexus提供的管理页面。如果你的nexus搭建在另一台内网服务器或者云端上,你可以输入**http://Ip:8081/**

如果你不想使用8081这个端口,可以在./nexus-3.30.0-01/etc/nexus-default.properties文件中进行修改

nexus默认提供了2个账号admin(管理员)和anonymous(访客)。首次登录admin的密码保存在./sonatype-work/nexus3/文件夹下。首次登录页面也会有这一方面的引导。登录后可看到如下图的页面

下面对一些常用的选项进行说明:

仓库

Nexus将仓库分为三种即group、hosted、proxy

  • group:顾名思义,它是仓库组,可以将多个仓库整合为一个仓库。例如我们定义了一个仓库组A,并且把B、C、D三个仓库添加进A组,那么我们通过引用A的依赖就可以调用到BCD的内容。
  • hosted:本地仓库,表示该仓库为本机创建的,简单说就是你的私有代码库
  • proxy:代理仓库,nexus的另一大功能,代理就通过这种类型的仓库实现。

Nexus默认会帮我们创建几个仓库,可以直接拿来用,如果你想做一些定制化的操作,可以学习更高级的用法,这里我只做简单的使用。

注意:默认创建的仓库会有两个hosted仓库,分别为maven-releases和maven-snapshots两个,简单来说它们就和"release-debug"之间的关系一样。

权限

Nexus默认提供了两种权限(Role),即nx-admin和nx-anonymous,在创建账号(User)的时候可以选择对应的权限赋予这个账号。初次使用我们不做过多的权限介绍,我们直接使用admin即可

配置Gradle进行模块上传

  1. 首先我们在gradle.properties文件定义好一些全局变量
groovy 复制代码
# Maven仓库的URL
MAVEN_REPO_RELEASE_URL=http://localhost:8081/repository/maven-releases/

# 登录nexus ossde的用户名
NEXUS_USERNAME=admin

#登录nexus oss的密码
NEXUS_PASSWORD=0b854d20-9884-4d57-9e8e-63cdec1ab3c5

# groupid最终引用时的名字
GROUP_ID=com.mot.test

# 对应Mavern的artifactId
POM_ARTIFACT_ID=test

# version
VERSION_NAME=0.0.1
  1. 其次我们在需要上传的moudle,修改其build.gradle
groovy 复制代码
apply plugin: 'maven'   //引用maven插件

uploadArchives {
    configuration = configurations.archives
    repositories {
        mavenDeployer {
            repository(url: MAVEN_REPO_RELEASE_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            pom.project {
                version VERSION_NAME
                artifactId POM_ARTIFACT_ID
                groupId GROUP_ID
            }
        }
    }
}

配置完以上以后,就可以在Android Studio提供的Gradle插件中上传模块了,双击如下图所示的插件

上传成功以后就可以再网页上查看到对应的aar包

如果在这里出现了上传失败的情况,那会可能是如下两种情况出现了问题:

  1. 账号密码对应的权限不够,或者账号密码错误。
  2. 仓库设置了"Disable redeploy",导致相同版本号上传失败,如下图所示

配置Gradle依赖私有代码库

到了这一步,我们已经可以将自己的模块上传至nexus了,接下来是最后一步了,这一步也是比较坑的。

  1. 首先配置全局build.gradle
groovy 复制代码
allprojects {
    repositories {
        maven {
            url 'http://localhost:8081/repository/maven-public/'
            credentials {
                username 'admin'
                password '0b854d20-9884-4d57-9e8e-63cdec1ab3c5'
            }
        }
        google()
        jcenter()
    }
}
  1. 其次配置需要使用依赖的模块的build.gradle
groovy 复制代码
implementation 'com.mot.test:test:0.0.1'
// 引用格式为:
// implementation 'GROUP_ID:POM_ARTIFACT_ID:VERSION_NAME'
// 与上一步对应的全局变量相对应

配置完成以后,点击sync gradle 可能会出现 ERROR: Unable to resolve dependency for... 的问题,总结了以下解决方法。

  • 全局build.gradle 配置maven 的url、账号和密码时,填写错误。url可以在nuexs网页上复制

  • 检查你上传的模块,是否还依赖了其他的第三方SDK。如果你依赖了第三方的SDK例如一个指纹模块,别的厂商给你提供了一个aar文件,然后你在本地libs内引用了。这种情况需要将第三方aar文件单独上传到nuexs上,然后模块中在引用,如下图所示:

上传完成以后,在自己的模块中引用:

groovy 复制代码
implementation 'com.mot.othersdk:test:0.0.1@aar'

//注意这里一定要加上@aar后缀,不然默认会去找jar类型,也会提示Unable to resolve dependency

相关推荐
帅得不敢出门4 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
我又来搬代码了5 小时前
【Android】使用productFlavors构建多个变体
android
德育处主任7 小时前
Mac和安卓手机互传文件(ADB)
android·macos
芦半山7 小时前
Android“引用们”的底层原理
android·java
迃-幵8 小时前
力扣:225 用队列实现栈
android·javascript·leetcode
大风起兮云飞扬丶8 小时前
Android——从相机/相册获取图片
android
Rverdoser8 小时前
Android Studio 多工程公用module引用
android·ide·android studio
aaajj9 小时前
[Android]从FLAG_SECURE禁止截屏看surface
android
@OuYang9 小时前
android10 蓝牙(二)配对源码解析
android
Liknana9 小时前
Android 网易游戏面经
android·面试