基于Gradle 迁移 Android、Java 项目 JCen

2021-05-18  本文已影响0人  ImWiki

以往我们发布 Android 开源项目通常会选择 JCenter,但是现在 JCenter 已经不再提供服务,所以我们需要另寻其它方式发布开源项目。jitpack.io 和 MavenCentral 是比较多人使用的,这里推荐使用 MavenCentral,是最常用的开源仓库,而且支持非开源的项目,发布 Android 项目需要包含几个步骤:

  1. 创建 sonatype 账号
  2. 申请 Group Id
  3. 验证 Group Id 归属
  4. 申请GPG密钥
  5. 配置 Gradle 配置
  6. 打包
  7. 发布

1. 创建 sonatype 账号

sonatype 网站根据要求填写资料申请账号即可。

申请 Group Id

Group Id不能随便写,这一点非常重要,这里有两种定义方式

  1. 通过域名申请:比如 example.com,那么反过来,你可以申请为com.example,同理example.io域名,那么可以申请为io.example,如果你不拥有该域名那么就不能使用这种方式。
  2. 通过代码托管网站申请:如果你的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 配置

  1. 在项目根目录创建一个叫做 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
                    }
                }
            }
        }
    }
}
  1. 修改项目根目录的build.gradle,添加以下代码
allprojects {
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}
  1. 在需要发布的module的build.gradle文件添加一下代码
apply from: '../maven_public.gradle'
  1. 修改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()
    }
}
上一篇 下一篇

猜你喜欢

热点阅读