nexus本地搭建,Android studio上传库、依赖缓存处理记录

1,515 阅读3分钟

nexus本地搭建,Android studio上传库、依赖缓存处理记录

背景

手头上维护了几个安卓常用相对稳定的库,目前跟其他APP放同一个project,显得臃肿.

尝试简单剥离,打aar包供APP开发使用,有类冲突、包冲突,需要直接打开包进行删减,对后续维护是个麻烦事.

为了可持续发展,采用远程依赖库的方式,看是否能正常解决这个痛点.于是国内外搜索引擎搜起


一、搭建

搭建相对简单,下载相关的包.其中「下载」环节,可能是相对麻烦.

官网点这里.

在此直接提供我的网盘下载地址,如果失效,可及时留言

macos或Linux 链接: pan.baidu.com/s/1HvoY5mAJ… 提取码: svyb

windows 链接: pan.baidu.com/s/1Gf-ounRb… 提取码: t7s4

  • 1.下载解压(我使用nexus-2.14.18-01)
  • 2.运行即可
    • windows进入bin\jsw\windows-x86或windows-x64,双击执行console-nexus.bat. 弹出的命令窗口不关闭.若需停止服务,在该命令窗口执行 ctrl+c

    • macos进入bin,执行./nexus start,停止服务./nexus stop

运行结果,看到相应的信息确认运行成功 或者打开默认管理界面

默认账号:admin

默认密码:admin123

二、配置android studio

1. 配置根目录下的build.gradle

...
allprojects {
    repositories {
        ...
        //snapshots,module库,同一个版本号可以多次上传,开发阶段可以使用
        maven { url 'http://127.0.0.1:8081/nexus/content/repositories/snapshots/' }
        
        //release,module库,同一个版本[不能]多次上传
        maven { url 'http://127.0.0.1:8081/nexus/content/repositories/releases/' }
		...
    }
}

2. 需要上传module的build.gradle配置

配置2,开发时snapshot,正式发布时才用release,所以开发时屏蔽release任务

apply plugin: 'com.android.library'

//1.配置maven
apply plugin: 'maven'

...

//配置2——snapshot版本
uploadArchives{
    repositories.mavenDeployer{
        repository(url: "http://127.0.0.1:8081/nexus/content/repositories/snapshots/") {
            //nexus登录默认用户名和密码
            authentication(userName: "admin", password: "admin123")
        }
        pom.groupId = "com.test.lib"// 唯一标识(通常为模块包名,也可以任意)
        pom.artifactId = "test-common" // 项目名称(通常为类库模块名称,也可以任意)
        pom.version = "1.0.1-SNAPSHOT" // 版本号
    }
}

//配置2——release版本
uploadArchives{
    repositories.mavenDeployer{
        repository(url: "http://127.0.0.1:8081/nexus/content/repositories/releases/") {
            //nexus登录默认用户名和密码
            authentication(userName: "admin", password: "admin123")
        }
        pom.groupId = "com.test.lib"// 唯一标识(通常为模块包名,也可以任意)
        pom.artifactId = "test-common" // 项目名称(通常为类库模块名称,也可以任意)
        pom.version = "1.0.1" // 版本号
    }
}

上传

双击脚本即可上传的私服

到此结束...了吗?还没有 还有个常见的缓存问题会困扰你若干个分钟

疑难问题:

1. 依赖远程库缓存问题

背景:应用中引用你刚上传的库,在没有改pom.version的情况下,在开发时特别容易出现该问题.

  • 同步一下gradle依赖能解决?——NOK

  • 以为删掉本地.m2库能解决?——NOK

  • 以为能删掉工程目录下的gradle缓存能解决?——NOK

没错,学艺不精的情况下,这么操作会摧毁你的意志.

试过网上很多帖子的,目前有效的解决方案: 在需要引用远程库的module中,配置build.gradle

...

android {
	...
    //关键配置
	configurations.all {
		resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' // 动态版本
		resolutionStrategy.cacheChangingModulesFor 0, 'seconds' // 快照版本
	}
}

dependencies {
	...
	implementation 'com.test.lib:test-common:1.0.1-SNAPSHOT'
}

每次更新库,同步一下gradle依赖即可.

即AS中点击功能按钮Sync Project with Gradle Files

2. localhost导致无法引用的问题

localhost需要改为127.0.0.1