关于Jcenter将于2021.5.1日sunset
Jfrog在2021.2.3日发出公告,将于5.1日正式陨落。Jcenter sunset公告传送门.
我其实是在4.7日更新库到jcenter,引用的地方却下载不到才在官网上看到这则公告。不禁感慨,曾经Jcenter是Android官方指定的托管中心,如今却落得黯淡离场。
毕竟一直白嫖的,也不好说人家不厚道,还是想办法迁移吧,不然项目编译都进行不下去。
由于项目着急编译,所以就暂时用Artifactory搭建私服过渡,搜索相关资料的时候发现当前大家好像还对jcenter关闭这事没什么反应,搭建过程中也着实走了不少弯路,故有了这篇备忘录,希望帮到大家。
jCenter的替代方案
1. mavenCentral
google已经替换成mavenCentral(),公司的话一般推荐使用,但是部署比较麻烦需要审核,国内使用还得翻墙。
2. Jitpack
跟Github有较深合作,可以一键授权拉取公开项目,私有项目需要收费。支持Gitlab、Gitee、BitBucket等git服务端。
2. 私服
市场上用的比较多的Nexus和Artifactory,两者的区别网上有很多对比,我们的使用情景仅是托管aar,Nexus只有商业付费版,Artifactory有开源版本,所以选择后者。
Jfrog Artifactory私服搭建
- 下载客户端
我们下载开源版本 下载链接, 下载自己系统适用的版本
- 运行客户端
解压后,找到bin目录下的这个文件,双击运行
这个bat会运行大概3分钟,中间没打印的时候千万别以为它挂了,不用着急喝杯茶就启动起来了。
在浏览器中输入 http://localhost:8081/artifactory ,如果没有意外,这会应该可以进入UI界面了。使用默认账号和密码登录,
username = “admin”
password = “password”
然后按照提示修改密码,输入前缀后创建local repo,这里我圈起来的就是repo key,后面上传aar到私服时需要指定。
至此最基本的配置就做完了,还有新增用户、组织管理啥的有空搞一搞。
- 配置Lib-project上传aar
- 项目Root目录的build.gradle
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.6.4'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.2"
}
}
- 项目app目录的build.gradle
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'
//gradlew clean artifactoryPublish
def MAVEN_LOCAL_PATH ='http://localhost:8082/artifactory'
def ARTIFACT_ID = 'BLSWebSocketAndroid'
def VERSION_NAME = 1.0.27
def GROUP_ID = 'com.ibroadlink'
artifactory {
contextUrl = MAVEN_LOCAL_PATH
publish {
repository {
repoKey = 'Your repo key' // 上一步我圈起来的那一坨,我选择的是broadlink_repo_local
username = "Your user name" // 上一步私服里,你的账号,可以直接用admin,但是建议创建一个非管理员账号,admin不建议暴露在代码中。
password = "Your password" // 账号的密码
}
defaults {
publications('aar')
publishArtifacts = true
properties = ['qa.level': 'basic', 'dev.team': 'core']
publishPom = true
}
}
}
artifactoryPublish.dependsOn('build')
publishing {
publications {
aar(MavenPublication) {
groupId GROUP_ID
version = VERSION_NAME
artifactId ARTIFACT_ID
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
pom.withXml {
def dependencies = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each{
if(it.group != null) {
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', it.group)
dependency.appendNode('artifactId', it.name)
dependency.appendNode('version', it.version)
}
}
}
}
}
}
- 在android studio的Terminal中输入指令,即可将aar上传到私服。过个1分钟左右即可在浏览器的UI中看到自己上传的文件
gradlew clean artifactoryPublish
- 配置App-project下载aar
- 项目app目录的build.gradle
buildscript {
repositories {
maven { url 'http://localhost:8082/artifactory/Your repo key/'} // 上一步我圈起来的那一坨,我选择的是broadlink_repo_local
}
}
allprojects {
repositories {
maven { url 'http://localhost:8082/artifactory/Your repo key/'} // 同上
}
}
- 项目app目录的build.gradle
dependencies {
implementation 'com.ibroadlink:BLSWebSocketAndroid:1.0.27'
}
对应规则
group_id : com.ibroadlink
artifact_id : BLSWebSocketAndroid
version_name: 1.0.27
- 我遇到的问题
- Failed to deploy file. Status code: 405
上传aar时遇到的,确认一下url是不是写对了
http://localhost:8081/artifactory
- status code 401 from server: Unauthorized
下载aar时遇到的,需要设置一下权限