基于新版本Gradle上传jitpack开源项目

本文介绍如何使用Gradle构建工具将Android库项目上传至Jitpack,并完成依赖配置。主要内容包括创建项目、配置Gradle插件、本地编译、上传至Git仓库、打Release包、在Jitpack上编译及最终的依赖使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为新版本的gradle编译开源库的方法已经变了,所以这边记录下 

1.第一步创建一个空项目

 2.因为这样会创建出来一个app项目,我们上传git是不需要这个的,所以我们在

项目中setting.gradle目录下注释掉 app模块,然后就可以手动删除掉这个app模块了。

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "JitpackTest"
//include ':app'  //注释掉module app
include ':mylibrary'

删除之后如下所示没有了app模块:

3.在mylibrary的build.gradle文件中添加 Maven Publish插件

 Maven Publish官网的使用地址:

使用 Maven Publish 插件  |  Android 开发者  |  Android Developers

plugins {
    id 'com.android.library'
    id 'maven-publish'   //添加maven publish插件
}

然后添加插件编译的Task:

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = 'com.example.mylibrary' //groupId 随便取,jitpack不会使用
                artifactId = 'test'  //test随便取,jitpack不会使用
                version = '1.0.1' //随便取,jitpack不会使用
            }
        }
    }
}

完整的buidle.gradle代码如下所示:

plugins {
    id 'com.android.library'
    id 'maven-publish'
}

android {
    compileSdk 32

    defaultConfig {
        minSdk 21
        targetSdk 32

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = 'com.example.mylibrary' //groupId 随便取
                artifactId = 'test'  //test随便取
                version = '1.0.1'
            }
        }
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

4.本地编译:因为我们得用gradlew编译,所以得切换到这个路径

 在控制台输入如下命令:

 ./gradlew publishToMavenLocal   (./ 当前路径下的...)

 会显示如下图所以,说明本地 编译成功了

 5.把项目上传到git仓库或者码云

切换到项目目录下输入:

git init 

 如果本地已经存在 .git文件,说明你已经git初始化了

 有些人的电脑可能会存在看不到这个文件,那是因为你文件管理中设置了 “隐藏项目”,打开即可:

 把 “隐藏的项目” 勾上即可

接下来关联git上的项目:

git remote add origin (git 仓库的地址) 

  将本地的项目推送到git端

git push -u origin master  

关于线上创建仓库,这里提醒一点:最好不要勾选下面标记的,不然会默认给你创建一个main分支,这样会和本地默认的master分支冲突

5. git线上打一个Release包:点击Releases

点击Draft a new release

 

 选择打包Release是基于那个tag的

 

 然后点击 Publise  Release就可以

6.前往 jitpack 上编译

JitPack | Publish JVM and Android libraries

将项目的地址:

 copy到如下地址,点击Look up就编译了

这个时候会显示编译失败:

 点击红色的log日志查看报错内容:

 意思是gradle插件需要java 11版本:

解决如上问题:

在mylibrary的build.gradle文件中添加如下:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

 然后在整个项目的根目录下创建:jitpack.yml 文件,里面配置 java11,添加如下内容:

before_install:
  - sdk install java 11.0.10-open
  - sdk use java 11.0.10-open

jdk:
  - openjdk11

6.再 提交到git 发布一个release版本

7.然后在jitpack上重新编译下:发现log日志编程绿色了,说明编译成功了,点击Get it

 会教我们如何去使用:

 到此就结束了本地库上传到jitpack仓库了。

使用:

 上图是基于老版本的Gradle使用的,新版本如下添加jitpack地址:

 然后再使用的地方依赖就可以了:

implementation 'com.github.awoyixiasiquanjia:mylibrary:1.0.1'

查看是否依赖上:如下图所示即成功依赖上了

 我把项目贴出来,有需要的朋友可以对比下:

GitHub - awoyixiasiquanjia/mylibrary

什么是jitpack?

JitPack 的实际工作原理

  1. JitPack 构建工具: JitPack 本质上是一个 构建服务,它会从 GitHub 或 GitLab 拉取源代码(通过 Git 标签、分支或 commit ID)并根据项目的构建配置(如 pom.xmlbuild.gradle)来 编译、打包 项目,生成 .jar 文件。

  2. 动态构建: JitPack 并不保存所有的包,它只是 动态构建 并托管依赖,针对每次请求它会从 Git 仓库中拉取最新的代码,进行编译并生成可下载的包文件。

  3. JitPack 仓库: 一旦 JitPack 构建完成,它会把生成的 .jar 文件发布到 JitPack 自己的 Maven 仓库https://jitpack.io)。这就是为什么你必须引用 https://jitpack.io 仓库地址的原因,因为构建结果存储在 JitPack 自己的仓库中,而不是 Maven Central。

JitPack 与 Maven Central 的区别

  • Maven Central 是一个 预构建 仓库,开发者将已经构建好的 .jar 包上传到 Maven Central,其他人可以直接引用。
  • JitPack 则是一个 动态构建 仓库,它从 GitHub 或 GitLab 拉取代码,构建并发布 .jar 文件。它并不将构建好的包上传到 Maven Central,而是将其托管在自己的网站上(即 https://jitpack.io)。

所以,当你引用 JitPack 库时,实际上是从 JitPack 的仓库获取构建好的依赖,而不是从 Maven Central 获取。这就是为什么你需要在 repositories 中添加 https://jitpack.io 的地址。

为什么不直接发布到 Maven Central?

JitPack 之所以不直接把包发布到 Maven Central,而是使用自己的仓库,主要是因为它的目标是让开发者能够快速地构建和共享 Git 仓库中的代码。JitPack 提供了一个 自动化构建平台,让你能够轻松地使用 GitHub 或 GitLab 上的代码,无需手动构建或上传到 Maven Central。

如果 JitPack 要将构建的包发布到 Maven Central,它就不再是一个动态构建平台,而是一个传统的上传和发布流程,这也违背了它提供 自动构建 的初衷。

总结

  • JitPack 是一个构建工具,它 动态构建 来自 GitHub 或 GitLab 的源代码,并将构建结果托管在 JitPack 自己的仓库https://jitpack.io)上。
  • Maven Central 是一个 静态仓库,存储的是预先构建好的包,而 JitPack 则是根据开发者的需求 实时构建和托管依赖
  • 因为 JitPack 并没有把构建好的包上传到 Maven Central,所以你必须使用 https://jitpack.io 来引用它构建的库。

什么是 Maven 仓库?

Maven 仓库(Maven Repository)是一个 远程存储库,用于存储和分发项目构建过程中所需的依赖库、插件、构建产物等。它不局限于 Maven 工具,实际上任何支持 Maven 仓库协议的工具都可以从中读取或发布依赖。

主要有两类 Maven 仓库:

  1. 本地仓库:通常在开发者机器上,存储已下载的依赖项(如 .jar.aar.pom 文件等)。它通常位于 ~/.m2/repository/(Maven 默认路径)。
  2. 远程仓库:用于共享依赖,通常分为 公共仓库(如 Maven Central)和 私有仓库(如 Nexus、Artifactory)。开发者可以从远程仓库下载依赖,或者将自己的构建产物上传到远程仓库。

关键点:

  • Maven 仓库并非专门为 Maven 构建工具而存在,它只是遵循 Maven 仓库协议(即,仓库中存储的文件格式和结构)。因此,不仅 Maven 可以访问,它也可以被 GradleIvySBT 等工具使用。
  • 例如,Gradle 使用 maven 仓库类型来定义和访问依赖(即 repositories { maven { url "https://repo.maven.apache.org/maven2" } })。所以,Gradle 同样可以访问 Maven 仓库存储的库。

Maven 仓库的结构

Maven 仓库的标准存储结构是基于 Group IDArtifact IDVersion 来组织文件的。每个库的路径结构通常类似于:

com/example/my-library/1.0.0/my-library-1.0.0.jar
 

其中:

  • Group ID:通常是组织或项目的唯一标识符,如 com.example
  • Artifact ID:具体库的标识符,如 my-library
  • Version:库的版本,如 1.0.0

Maven 仓库协议

Maven 仓库协议(Maven Repository Protocol)是指在 Maven 仓库中存储、下载和发布构建产物的标准方式。它定义了如何组织文件、命名规则以及构建工具(如 Maven、Gradle、Ivy)如何与 Maven 仓库交互的约定。

Maven 仓库协议不仅限于 Maven,它也被其他构建工具(如 GradleIvy)采用。理解 Maven 仓库协议可以帮助你在不同构建工具中更好地配置和使用仓库。

1. Maven 仓库的组织结构

Maven 仓库的核心特点之一就是基于 Group IDArtifact IDVersion 来组织和存储依赖。每个构件(artifact)的存储路径通常由以下几个元素构成:

  • Group ID:标识组织、公司或项目的唯一标识符。通常使用反向域名(如 com.example)。
  • Artifact ID:构件的名称或标识符。通常是库或模块的名称(如 my-library)。
  • Version:构件的版本号(如 1.0.0)。
  • Classifier(可选):用于指定构件的类型,例如 sourcesjavadoc 或特定平台的构件(如 linux)。
  • Packaging:构件的类型(如 .jar.aar.pom 等)。

2. Maven 仓库的文件类型

Maven 仓库中的文件通常包括:

  • JAR 文件(.jar):Java 构件的二进制包。
  • POM 文件(.pom):项目对象模型(POM)文件,用于描述构件的元数据、依赖关系和插件。
  • 源代码 JAR(.jar):包含源代码的 JAR 文件(my-library-1.0.0-sources.jar)。
  • Javadoc JAR(.jar):包含 Javadoc 文档的 JAR 文件(my-library-1.0.0-javadoc.jar)。
  • AAR 文件(.aar):Android 库文件,类似于 JAR,但适用于 Android 项目

maven-publish的作用是解决了手动上传

是的,maven-publish 插件的作用是简化和自动化构建产物上传到 Maven 仓库的过程。它允许你通过 Gradle 脚本直接配置并上传构建产物(例如 .jar.aar 文件)到 Maven 仓库,避免了手动上传和复杂的命令行操作。

不过,手动上传也是可以的,只不过过程会相对麻烦,通常包括通过 命令行工具Web 界面 进行上传。下面我会分别介绍如何使用 maven-publish 插件进行上传,以及如何手动上传构建产物。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值