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