在 Jitpack 上发布开源项目(基于 Gradle 7.3.3)

761 阅读2分钟

折腾了一下午,终于实现了在高版本的 Gradle 下发布依赖库到 Jitpack 了,梳理一下流程,方便大家查阅。

将 AAR 包发布到 Jitpack

  1. 首先创建壳工程 EUtils,将具体业务 EthanUtils 以 Android Lib 的形式引入

  1. 壳工程中记得添加对 EthanUtils 的依赖

  1. 在 EthanUtils 的 build.gradle 中添加以下内容
plugins {
    id 'com.android.library'
    id 'maven-publish'
}

android {
    ...
}

afterEvaluate {
    publishing {
        // 当前依赖库的版本号,方便我们开发者自己查看,同时发布到 MavenLocal 也是用的这个版本号(Jitpack不会使用到)
        def versionName = "1.0.2"
        publications {
            release(MavenPublication) {
                from components.release // 表示发布 release(Jitpack不会使用到)

                // 自定义属性
                groupId = 'com.ethan.EthanUtils' // 依赖库的 Group Id(Jitpack不会使用到)
                artifactId = 'EthanUtils' // 依赖库的名称,单组件发布时随意填写,多组件时即为此组件的 ArtifactId(Jitpack不会使用到)
                version = versionName
            }
        }
    }
}

dependencies {
    ...
}
  1. 为保证高版本 Gradle 在编译时对 Java 版本的要求,在主工程下创建 jitpack.yml 文件,内容如下

  1. 在主工程的 settings.gradle 中添加 Jitpack 仓库的依赖
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven {
            url "https://jitpack.io"
            allowInsecureProtocol = true // 如果 url 为 http 协议,需要添加此项;https 可不用
        }
        google()
        mavenCentral()
    }
}
...
  1. 代码上传至 Github,并创建 release 版本。tag 就是版本号,title 是对外展示的名称

  1. 进入 Jitpack 发布平台JitPack | Publish JVM and Android libraries,粘贴 Github 项目链接

  1. 点击 Get it,等待云端编译,Log 为绿色代表编译成功
  2. 成功后其他项目便可以引用你上传的 AAR 了
dependencies {
	implementation 'com.github.Star1128:EUtils:Tag'
}
  1. 保险起见,你可以在正式发布前进入终端,输入 gradle publishToMavenLocal 进行本地调试。其他项目在其主工程的 settings.gradle 中添加 mavenLocal()
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        ...
        mavenLocal() // 低 Gradle 版本是在 build.gradle 中添加
    }
}

随后在依赖中使用你先前指定的信息,就可以进行调试了

dependencies {
	implementation 'com.ethan.EthanUtils:EthanUtils:1.0.2'
}