Android库发布到Maven Central全攻略
前言
最近听说jCenter要关闭,搞的人心惶惶,寻思着迁移到别的库吧半天找不到一个靠谱点的,最终找到了与jCenter齐名的Maven Central,但Maven Central的申请和配置是要比jForg那边的bintray麻烦得多的,如何注册上传库到Maven Central就变得非常困难了,网上找了一圈基本都是Java库的上传攻略,无奈只能到Google上找资料+看官方文档总算在今天下午搞定了上传包的全过程,本文将详细描述Android库发布到Maven Central全攻略。本文发表在大话安卓小专栏,禁止一切未授权的转载行为。
第一步·注册
与jCenter是由jForg运营,在bintray.com做管理一样,Maven Central是由sonatype运营的,那么首先需要去注册一个sonatype的账号并获得仓库使用许可。
你需要先前往issues.sonatype.org注册账号,界面如图,点击红框部分:
注册需要填写邮箱(重要,请填写真实的邮箱)、名字、用户名(重要,用于登录)、密码(需要含符号、英文和数字的复杂密码),和验证码完成注册。
小提示,sonatype.org实际上是支持中文的,登录后会提示你切换语言,非常友好。
名称直接填写项目名就行,重点是Group ID,这里如果你没有自己的网站域名,那么一般建议按照Github填写,例如你的Github为github.com/kongzue,那么这里可以写成com.github.kongzue,如果有你自己的域名,则可以按照你的域名翻转作为你的主地址,另外注意,这个申请实际上只需要申请一次,那么Group Id建议直接设置成主包名,不需要具体到项目,例如我的项目都是com.kongzue
开头的,那么这里不要具体到com.kongzue.dialogv3
,因为申请后你的所有项目都可以放到com.kongzue
开头的maven仓库下。
额外需要注意的是,如果使用自己的域名,需要按照官方的要求,在DNS配置配置一个TXT记录指向你的Github地址来完成验证,这个比较麻烦,具体参考:central.sonatype.org/pages/produ…
申请后请耐心等待官方的回复,待issues状态变为已解决,那么就说明申请成功了,如果有任何不成功的,官方会在下方给出注释,你也可以通过注释回复官方,完成申请。
第二步·Gradle准备
接下来需要进入你的项目,完成一系列的配置,请先参考下载下边的gradle文件放置在项目的根目录,请注意文中中文部分请按照需要自行修改:
文件:publish-mavencentral.gradle
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
}
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
println "Found secret props file, loading props"
Properties p = new Properties()
p.load(new FileInputStream(secretPropsFile))
p.each { name, value ->
ext[name] = value
}
} else {
println "No props file, loading env vars"
}
publishing {
publications {
release(MavenPublication) {
// The coordinates of the library, being set from variables that
// we'll set up in a moment
groupId PUBLISH_GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version PUBLISH_VERSION
// Two artifacts, the `aar` and the sources
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
artifact androidSourcesJar
// Self-explanatory metadata for the most part
pom {
name = PUBLISH_ARTIFACT_ID
description = '你的项目描述'
// If your project has a dedicated site, use its URL here
url = 'Github地址'
licenses {
license {
//协议类型,一般默认Apache License2.0的话不用改:
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = '用户ID'
name = '用户名'
email = '邮箱'
}
}
// Version control info, if you're using GitHub, follow the format as seen here
scm {
//修改成你的Git地址:
connection = 'scm:git:github.com/xxx/xxxx.git'
developerConnection = 'scm:git:ssh://github.com/xxx/xxxx.git'
//分支地址:
url = 'https://github.com/xxx/xxxx/tree/master'
}
// A slightly hacky fix so that your POM will include any transitive dependencies
// that your library builds upon
withXml {
def dependenciesNode = asNode().appendNode('dependencies')
project.configurations.implementation.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
repositories {
// The repository to publish to, Sonatype/MavenCentral
maven {
// This is an arbitrary name, you may also use "mavencentral" or
// any other name that's descriptive for you
name = "项目名称"
def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
// You only need this if you want to publish snapshots, otherwise just set the URL
// to the release repo directly
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
// The username and password we've fetched earlier
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
signing {
sign publishing.publications
}
完成后进入你的local.properties文件,添加如下:
signing.keyId=XXXXXXXX
signing.password=密码
signing.secretKeyRingFile=D\:/key/你的GPG签名秘钥文件.gpg
ossrhUsername=sonatype帐号
ossrhPassword=sonatype密码
第三步·签名秘钥申请
这里需要一个GPG秘钥,需要下载GPG管理器客户端完成申请:
此软件是支持中文的,请放心使用,如下图,点击不捐助,点击下载安装即可。
安装完成后,点击主界面菜单,新建秘钥
点击第一个选项,创建个人秘钥:
接下来输入你的账号、邮箱以及勾选Protect the generated key with a passphrase. (使用密码保护生成的密钥)在高级设置里可以设置更详细的,例如过期时间,但过期时间不可以太长,或报错。
下一步,设置密码,完成,在完成界面先不用急着上传或备份,直接点击完成。
在主界面双击你创建的秘钥,可以看到以下界面
请记住下边红框圈住的8位字母,复制下来,一会要用。点击生成吊销证书按钮,保存下来你的吊销证书,然后回到主界面点击右键,在服务器发布:
接下来再次右键,点击导出,重命名导出文件后缀,导出为gpg格式的文件。
回到Android Studio,到local.properties文件中,编辑刚刚的文件:
signing.keyId=02C4AC4B
signing.password=你的秘钥密码
signing.secretKeyRingFile=D\:/key/你的GPG签名秘钥文件.gpg
ossrhUsername=sonatype帐号
ossrhPassword=sonatype密码
完成编辑。
第四步·上传
先进入你的Module的build.gradle,添加以下代码:
ext {
PUBLISH_GROUP_ID = "com.xxx.xxxx" //项目包名
PUBLISH_ARTIFACT_ID = 'xxxx' //项目名
PUBLISH_VERSION = 0.0.1 //版本号
}
apply from: "${rootProject.projectDir}/publish-mavencentral.gradle"
Sync后,先通过Gradle编译release版本,双击Module名称/Tasks/build/assemble:
完成后,上传到Maven Central,双击Module名称/Tasks/publishing/publicReleasePublicationToXXXRepository
执行完毕后,进入oss.sonatype.org/ ,使用你的sonatype帐号和密码登录。
进入左侧的Staging Repositories
在右上角搜索你的名字,应该能找到你上传的库文件,点击下方的Content可以查看详细已上传的文件:
确认无误后,点击Close关闭,输入介绍后点击Confirm完成所有操作。
接下来,需要等待5-10分钟,待Activity选项卡中出现对号的“Repository closed”即完成准备,然后点击Release按钮发布到MavenCentral,等待几个小时后可以在 search.maven.org/ 查询发布结果。
结束
以上就是Android库发布到Maven Central全攻略了,本文发表在大话安卓小专栏,禁止一切未授权的转载行为。如有疑问也欢迎加群271127803进行讨论。