以往我们发布 Android 开源项目通常会选择 JCenter,但是现在 JCenter 已经不再提供服务,所以我们需要另寻其它方式发布开源项目。jitpack.io 和 MavenCentral 是比较多人使用的,这里推荐使用 MavenCentral,是最常用的开源仓库,而且支持非开源的项目,发布 Android 项目需要包含几个步骤:
- 创建 sonatype 账号
- 申请 Group Id
- 验证 Group Id 归属
- 申请GPG密钥
- 配置 Gradle 配置
- 打包
- 发布
1. 创建 sonatype 账号
到 sonatype 网站根据要求填写资料申请账号即可。
申请 Group Id
- 项目选择
Community Support - Open Source Project Repository Hosting
- 问题类型选择
New Project
Group Id不能随便写,这一点非常重要,这里有两种定义方式:
- 通过域名申请:比如 example.com,那么反过来,你可以申请为com.example,同理example.io域名,那么可以申请为io.example,如果你不拥有该域名那么就不能使用这种方式。
- 通过代码托管网站申请:如果你的github用户名为username,那么可以申请为io.github.username,也可以创建一个组织来实现,比如组织名字为organization,那么可以申请为io.github.organization。
点击新建
后,那么我们就可以得到了一条名字叫做OSSRH-67600
的申请记录,接下来就是验证Group ID归属了。
3. 验证 Group Id 归属
这里就不详细介绍怎么通过域名的方式申请Group ID的验证,这里介绍如何通过Github方式申请Group ID的验证方式,如果是申请的Group ID为 io.gihub.xxx,那么就要在github.com/xxx下面创建一个和申请名称相同的仓库,比如https://github.com/xxx/OSSRH-67600。
创建项目后,需要找到申请记录,修改状态为Open,等几个小时或者第二天,申请就会通过了。
4. 申请GPG密钥
安装gpg
brew install gpg
生成密钥,根据要求填写资料
gpg --full-gen-key
上传密钥
gpg --keyserver https://keys.openpgp.org/ --send-keys 0945148C
生成secring.gpg文件
gpg --export-secret-keys -o secring.gpg
5. 配置 Gradle 配置
- 在项目根目录创建一个叫做
maven_public.gradle
的文件,复制下面代码到文件中
group = GROUP_ID
version = VERSION_NAME
apply plugin: 'maven'
apply plugin: 'signing'
signing {
sign configurations.archives
}
boolean isAndroid = project.getPlugins().hasPlugin('com.android.library')
if (isAndroid) {
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.source
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
excludes = ['**/*.kt']
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
}
} else {
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives javadocJar, sourcesJar
}
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: OSSRH_USERNAME, password: OSSRH_PASSWORD)
}
snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: OSSRH_USERNAME, password: OSSRH_PASSWORD)
}
pom.project {
name POM_NAME
packaging isAndroid ? 'jar' : 'aar'
description POM_DESCRIPTION
url POM_URL
scm {
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
url POM_SCM_URL
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
email POM_DEVELOPER_EMAIL
}
}
}
}
}
}
- 修改项目根目录的build.gradle,添加以下代码
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
- 在需要发布的module的build.gradle文件添加一下代码
apply from: '../maven_public.gradle'
- 修改gradle.properties
signing.keyId=3E16D986 # 这里填写前面对应的后面8位密钥字符串
signing.password=# 填写创建密钥时候输入的密码
signing.secretKeyRingFile=/Users/wiki/.gnupg/secring.gpg # 创建的secring.gpg的网站路径
OSSRH_USERNAME=XXXXXXX # 注册sonatype的账号
OSSRH_PASSWORD=XXXXXXX 注册sonatype的密码
GROUP_ID=io.github.xxxx # 申请到的Group Id
VERSION_NAME=1.0 # 版本号
POM_NAME=Project Name # 项目名称
POM_DESCRIPTION=Project Description # 项目描述
POM_URL=https://github.com/xxx/XXXX
POM_SCM_URL=https://github.com/xxx/XXXX
POM_SCM_CONNECTION=scm:git@github.com:xxx/XXXX.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:xxx/XXXX.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_DEVELOPER_ID=XXXXXXX # 注册sonatype的账号
POM_DEVELOPER_NAME=开发者名称
POM_DEVELOPER_EMAIL=邮箱
6. 打包
./gradlew uploadArchives
7. 发布
登录 https://s01.oss.sonatype.org/#welcome
点击 close 后稍等2分钟,就可以点击Release发布了
最后
Release后,需要几个小时才能同步到Maven仓库,几个小时候就可以在仓库中看到最新版本
https://search.maven.org/search
就可以把jcenter()改成mavenCentral(),引入我们的开源项目啦
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
网友评论