美文网首页
基于Gradle 迁移 Android、Java 项目 JCen

基于Gradle 迁移 Android、Java 项目 JCen

作者: ImWiki | 来源:发表于2021-05-18 22:14 被阅读0次

以往我们发布 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

  • 项目选择 Community Support - Open Source Project Repository Hosting
  • 问题类型选择New Project

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()
    }
}

相关文章

网友评论

      本文标题:基于Gradle 迁移 Android、Java 项目 JCen

      本文链接:https://www.haomeiwen.com/subject/gkfnlltx.html