【Gradle-9】Gradle插件发布指南

news2024/11/24 11:22:48

1、前言

不管是在公司内部,还是开源,Gradle插件发布都是一项必备的技能,本文主要介绍本地发布和远端发布两种方式。

2、本地发布

2.1、添加依赖

在plugin>build.gradle文件中(插件的项目)先依赖一个maven发布的插件'maven-publish'

plugins {
    id 'maven-publish'
}

dependencies {
    implementation 'com.android.tools.build:gradle:7.3.0'
}

2.2、发布配置

maven的发布配置是在publishing { }闭包中设置的。
本地发布主要为两部分:

  • GAV坐标
  • 仓库地址
group 'com.yechaoa.plugin'
version '1.0.0'

publishing {
    // 配置Plugin GAV
    publications {
        maven(MavenPublication) {
            groupId = group
            artifactId = 'dependencies'
            version = version

            from components.java
        }
    }
    // 配置仓库地址
    repositories {
        maven {
            url layout.buildDirectory.dir("maven-repo")
        }
    }
}

2.3、执行发布

以上配置完成即可执行发布操作:

./gradlew publish

或者在Android Studio右边Gradle可视化的面板点击运行publish
publish.png

2.4、生成产物

不想要的.png
ok,这时候build文件夹下已经有本地发布配置的maven-repo文件夹了。
主要确认jar/aar文件、pom文件、metadata等正确即可。

2.5、使用

ok,本地发布完了,要想使用这个插件,跟我们正常依赖插件是一样的流程。
三步走:

  1. 在settings.gradle文件中配置插件仓库地址
pluginManagement {
    repositories {
        // ...
        maven {
            url './maven-repo'
        }
    }
}
  1. 在project>build.gradle文件中添加插件依赖
buildscript {
    dependencies {
        classpath('com.yechaoa.plugin:dependencies:1.0.0')
    }
}
  1. 在app:build.gradle文件中依赖我们的plugin
plugins {
    id 'com.yechaoa.plugin.dependencies'
}

以上配置都是在app模块中添加的,即需要使用的模块。

注意:本地依赖使用的时候,要先发布,再依赖插件,否则就会出现cannot found找不到依赖的情况。

3、Maven远端发布

Maven是一个软件项目管理工具,基于项目对象模型 (POM) 的概念,Maven 可以通过中央信息来管理项目的构建、报告和文档,也是最常用的存储库。

上面我们已经完成了本地发布,Maven远端发布主要是需要各种配置。
基于本地发布,远端发布有几个差异点:

  • 注册仓库账号;
  • 配置POM;
  • 签名;
  • 远端仓库地址;
  • 准备域名;

比较繁琐,就。。不全流程陪跑了

一个示例:

plugins {
    id 'java-library'
    id 'maven-publish'
    id 'signing'
}

group = 'com.example'
version = '1.0'

java {
    withJavadocJar()
    withSourcesJar()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifactId = 'my-library'
            from components.java
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
            pom {
                name = 'My Library'
                description = 'A concise description of my library'
                url = 'http://www.example.com/library'
                properties = [
                    myProp: "value",
                    "prop.with.dots": "anotherValue"
                ]
                licenses {
                    license {
                        name = 'The Apache License, Version 2.0'
                        url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id = 'johnd'
                        name = 'John Doe'
                        email = 'john.doe@example.com'
                    }
                }
                scm {
                    connection = 'scm:git:git://example.com/my-library.git'
                    developerConnection = 'scm:git:ssh://example.com/my-library.git'
                    url = 'http://example.com/my-library/'
                }
            }
        }
    }
    repositories {
        maven {
            // change URLs to point to your repos, e.g. http://my.org/repo
            def releasesRepoUrl = layout.buildDirectory.dir('repos/releases')
            def snapshotsRepoUrl = layout.buildDirectory.dir('repos/snapshots')
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

signing {
    sign publishing.publications.mavenJava
}


javadoc {
    if(JavaVersion.current().isJava9Compatible()) {
        options.addBooleanOption('html5', true)
    }
}

全流程的大家可以参考:

  • 再见JCenter,将你的开源库发布到MavenCentral上吧
  • Gradle 构建工具 #4 来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略

4、JitPack

如果你的项目是使用GitHub托管的,那么最常用的发布方式就是使用JitPack了,它是一个简单易用的Git包存储库,使用、发布也非常简单,不需要注册网站账号,搞一堆验证什么的,而且对项目也是无侵入式的,也不需要服务器、域名什么的。

4.1、使用GitHub托管

最基本的就是项目使用GitHub来进行托管了,就是把项目上传到GitHub,Public或者Private都行。
比如我这个GradleX项目:
github.png

4.2、发布

你甚至什么都没干,就传了一个项目,就可以直接走发布流程了。
release.png

在项目仓库主页的右边菜单列表,找到Releases,点击「Create a new release」。
如果已经发布过了,这里就是发布记录,点进去可以「Draft a new release」。
publish.png

  • 设置tag,即版本号,如果不是正式版,可以在后面加上alpha,比如1.0-alpha;
  • 选择发布的分支;
  • 发布标题;
  • 发布描述;
  • 点击「Publish release」进行发布;

发布完成会有产物和记录
产物和记录.png

4.3、使用

上面就发布完成了,那么如何使用呢?
打开Jitpack官网:https://www.jitpack.io/,在输入框里输入yechaoa/GradleX,即username+project。
然后点击Look up开始查找和构建。
get it.png
构建完成有了Log日志之后,即可以点击Get it获取使用方式。
使用方式:

  1. 首先要添加jitpack的仓库地址;
  2. 然后添加项目依赖,因为是基于GitHub发布的,域名前缀会com.github,自定义需要添加映射;

在添加依赖这里,因为我们是整个项目发布的,包含多个模块,所以我们也可以选择子模块来进行单独依赖。
比如我这个项目中有:
dependencies.png
我的项目是GradleX,插件模块是plugin,插件是dependencies。根据最小原则,我们可以直接选择依赖插件dependencies,后面有多个插件的时候,我们可以选择依赖plugin模块。

4.4、验证

发布完了,我们来验证一把试试。

首先在settings.gradle中添加仓库:

	repositories {
        maven { url 'https://jitpack.io' }
    }

然后再添加依赖:

	dependencies {
        classpath('com.github.yechaoa.GradleX:dependencies:1.0')
    }

因为我们是依赖插件,所以implementation要换成classpath。

最后是依赖插件和打开插件配置:

plugins {
    id 'com.yechaoa.plugin.dependencies'
}

printDependencies {
    enable = true
}

然后我们sync一下看看。

> Configure project :app
DependenciesPlugin >>>>> com.yechaoa.plugin.DependenciesPlugin
---hasProperty isTest no
DependenciesPlugin >>>>> 已开启依赖打印
DependenciesPlugin >>>>> applicationVariant.getName() = debug
Run with --info for a stacktrace.
--------------官方库 start--------------
com.google.android.material:material:1.8.0
androidx.appcompat:appcompat:1.5.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10
androidx.core:core-ktx:1.8.0
......

可以看到,已经有预期的输出结果了。
因为sync会触发Gradle构建,从而我们在编译期打印依赖的插件就会生效,并打印项目中的依赖。

ok,jitpack的发布方式就这些了,是不是非常简单~

5、Gradle Plugin Portal

Gradle插件门户网站是一个专用于Gradle插件的集中式、可搜索的存储库,发布的流程和配置也都比Maven要简单多了。

5.1、注册账号

首先要注册一个Gradle插件门户网站的账号,https://plugins.gradle.org/user/login,我们直接使用Github账号登录即可。
gradle protal.png
GitHub执行2FA双重校验之后,使用GitHub登录时需要再校验一次,按照流程走就行,不复杂。

5.2、获取秘钥

在API Keys选项下面生成秘钥。
秘钥.png

5.3、配置秘钥

秘钥用来发布用,通常是放在HOME_DIR/.gradle/gradle.properties (~/.gradle/gradle.properties)文件中,如果没有,就新建一个。当然也可以放在其他有效的地方,但我还是建议放在这,可以全局用。
如果这一步你没有配置,也可以手动执行发布命令,然后通过传参的方式把秘钥给带上去:

$ ./gradlew publishPlugins -Pgradle.publish.key=<key> -Pgradle.publish.secret=<secret>

5.4、发布配置

5.4.1、依赖发布插件

gradle插件门户发布的话有自己的发布插件

plugins {
    id 'com.gradle.plugin-publish' version '1.1.0'
}

发布插件1.0.0版本及以上的用法,需要Gradle 7.6及以上。
不过1.0.0版本及以上版本也带来了诸多便利,比如:

  • 它包含’java-gradle-plugin’和’maven-publish’插件;
  • 自动生成并发布源码和文档;
  • 签名也是自动的;

5.4.2、配置发布信息

因为我们前面本地发布的时候依赖过id 'java-gradle-plugin'插件了,这里就省事了,直接在gradlePlugin { } 里面继续配置就行。

gradlePlugin {
    // 项目地址
    website = 'https://github.com/yechaoa/GradleX'
    // 项目仓库URI
    vcsUrl = 'https://github.com/yechaoa/GradleX.git'

    // 可以有多个plugin配置
    plugins {
        // register 这个名字可以随便填
        register {
            // 插件id
            id = 'com.yechaoa.plugin.dependencies'
            // 插件全路径
            implementationClass = "com.yechaoa.plugin.DependenciesPlugin"
            // 插件名称
            displayName = 'DependenciesPlugin'
            // 描述、简介
            description = 'Show Dependencies Plugin'
            // 插件类别,即标签、关键词的意思
            tags.addAll('Dependencies', 'yechaoa', 'plugin')
        }
    }
}

以上配置需要Gradle7.6版本及以上,老的版本用的是pluginBundle,而不是gradlePlugin
@since 7.6:

    /**
     * Returns the property holding the URL for the plugin's website.
     *
     * @since 7.6
     */
    @Incubating
    public Property<String> getWebsite() {
        return website;
    }

发布后的示例:
image.png

5.5、执行发布

以上配置完成之后,sync一下。
发布命令:

./gradlew publishPlugins

没配秘钥的话:

./gradlew publishPlugins -Pgradle.publish.key=<key> -Pgradle.publish.secret=<secret>

或者在Gradle面板中双击publishPlugins执行:
双击执行.png
接下来就是等待审核了。审核是有一些要求的,比如太简单且没有意义的helle wordSNAPSHOT版本等。
审核通过就可以在Gradle插件门户网站搜到了。

5.6、引用方式

7.0之后:

plugins {
  id "com.yechaoa.plugin.dependencies" version "1.0.0"
}

7.0之前:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.yechaoa.plugin:dependencies:1.0.0"
  }
}

apply plugin: "com.yechaoa.plugin.dependencies"

7.0之后因为在pluginManagement{ }中默认加了gradlePluginPortal()地址,所以配置更简单了。

7、总结

Gradle插件发布就介绍到这里了,虽然maven的发布方式很繁琐,但也只是第一次这样,配置完成后就可以抽成一个脚本,每次发布执行一下就ok了,不过还是首推JitPack,毕竟真的太方便了。

8、最后

写作不易,感谢支持~

9、GitHub

https://github.com/yechaoa/GradleX

10、相关文档

  • Apache Maven
  • Publishing a project as module
  • Maven Publish Plugin
  • POM Reference
  • MavenPom
  • jitpack.io
  • Publishing Plugins to the Gradle Plugin Portal
  • How do I publish my plugin to the Plugin Portal using version 1.0+?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式搜索引擎Elasticsearch

一、Elasticsearch介绍 1.Elasticsearch产生背景 大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么 一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎 Elasticsearch使用Java开发…

零基础也能制作小说推文视频,输入文案就能制作推文短视频

小说推文视频一直是各类写手们追捧的创作方式之一&#xff0c;而如何制作出优质、吸引人的小说推文视频成了许多人关注的焦点。幸运的是&#xff0c;现在有了一款名为推文视频制作神器&#xff0c;让制作小说推文视频变得轻松简单。 这款小说推文视频神器的功能十分强大&#…

山西电力市场日前价格预测【2023-09-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-25&#xff09;山西电力市场全天平均日前电价为442.30元/MWh。其中&#xff0c;最高日前电价为720.46元/MWh&#xff0c;预计出现在19: 00。最低日前电价为276.06元/MWh&#xff0c;预计…

AUTOSAR 多核操作系统时序监控系统设计

AUTOSAR 多核操作系统时序监控系统设计 0 引言1 AUTOSAR 介绍1.1 AUTOSAR 诞生1.3 AUTOSAR 架构 2 时序监控系统软硬件介绍2.1 硬件部分2.2 软件部分 3 时序监控系统设计3.1 监控系统整体设计3.2 监控数据获取3.3 监控数据存储3.4 监控数据处理 3.5 还原运行时序5 推动 5G工业互…

3D点云目标检测:Centerformer训练waymo数据集

一、环境准备 项目地址:centerformer 1.0、基础环境 python 3.8.0 torch 1.9.1cu111 waymo-open-dataset-tf-2-6-0 1.4.9 spconv 1.2.1 其余按照requirement.txt里安装就行 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt由于我本人是在…

uniapp、vue实现滑动拼图验证码

uniapp、vue实现滑动拼图验证码 实际开发工作中&#xff0c;在登陆的时候需要短信验证码&#xff0c;但容易引起爬虫行为&#xff0c;需要用到反爬虫验证码&#xff0c;今天介绍一下拼图验证码&#xff0c;解决验证码反爬虫中的滑动验证码反爬虫。滑动拼图验证码是在滑块验证码…

QLineEdit设置数据的输入范围QIntValidator和QDoubleValidator

在日常开发过程中QLineEdit作为输入框&#xff0c;有时要限制输入的内容&#xff0c;比哪&#xff0c;考试分数为0-100&#xff0c;这个时候就使用QIntValidator作为限制范围&#xff0c;而如何输入的是带小数的呢&#xff0c;那么使用QDoubleValidator可以吗&#xff0c;下面请…

ipad触控笔有必要买原装吗?ipad2023手写笔推荐

目前&#xff0c;在无纸教学、无纸办公的大背景下&#xff0c;电容笔得到了广泛的关注。只是&#xff0c;对于这两支电容笔的不同之处&#xff0c;不少人并不是很清楚。其实这两种电容笔都很好区分&#xff0c;第一种是主动电容笔&#xff0c;也就是我们常用的电容式屏幕&#…

安全生产一张图 安全生产三维地理信息平台

一、 建设目标 易图讯科技是一家专业从事大数据、移动互联网、物联网、三维GIS、AI系统研发&#xff0c;开发了三维电子沙盘、AI三维电子沙盘、WEB三维地球、移动端三维地球、数字武装三维电子沙盘、智慧动员三维电子沙盘、智慧公安三维电子沙盘、智慧安监三维电子沙盘、森林防…

vue重修003

文章目录 版权声明day03一、今日目标1.生命周期2.综合案例-小黑记账清单3.工程化开发入门4.综合案例-小兔仙首页 二、Vue生命周期三、Vue生命周期钩子四、生命周期钩子小案例1.在created中发送数据2.在mounted中获取焦点 五、案例-小黑记账清单1.需求图示&#xff1a;2.需求分析…

Maven项目在pom.xml里配置远程仓库

如图:作用 在项目的 pom.xml 文件中配置了 <repositories> 元素&#xff0c;Maven会优先使用项目级别的仓库配置&#xff0c;而不会查找全局设置文件中的仓库配置。换句话说&#xff0c;项目级别的配置会覆盖全局设置文件中的仓库配置。 这意味着当在项目的 pom.xml 文…

AUTOSAR 面试知识回顾

如果答不上来&#xff0c;就讲当时做了什么 1. Ethernet基础: 硬件接口&#xff1a; ECU到PHY&#xff1a; data 是MII总线&#xff0c; 寄存器控制是SMI总线【MDCMDIO两根线, half duplex】PHY输出(100BASE-T1)&#xff1a; MDI总线&#xff0c;2 wire 【T1: twisted 1 pair …

C++项目:仿muduo库实现高性能高并发服务器

文章目录 一、实现目标二、前置知识&#xff08;一&#xff09;HTTP服务器1.概念 &#xff08;二&#xff09;Reactor模型&#xff1a;1.概念2.分类&#xff08;1&#xff09;单Reactor单线程&#xff1a;单I/O多路复用业务处理。&#xff08;2&#xff09;单Reactor多线程&…

腾讯mini项目-【指标监控服务重构-会议记录】2023-07-26

2023-07-26组长会议纪要 A组 项目对齐和问题 分配需求&#xff0c;SLI指标上报&#xff0c;暂时没有实际效果 每个人负责一条指标&#xff0c;同步代码&#xff0c;时间问题还是难题跟B组同学请教&#xff0c;答疑 问题&#xff1a;启动 Tracer 【已解决】 环境问题&#xf…

21.redo日志(下)

title: “redo日志&#xff08;下&#xff09;” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” redo log的刷盘时机 log buffer 空间不足时&…

【linux】性能优化

这张图谱出自倪朋飞&#xff1b; 1、什么是性能指标 这里一定会想到 “高并发” 和 “响应快”&#xff0c;这里词正对应的就是 “吞吐” 和 “延时”。我们知道随着应用负载的体系&#xff0c;系统资源的使用就会提高&#xff0c;甚至达到极限。而性能问题的本质&#xff0c…

【CNN-FPGA开源项目解析】卷积层01--floatMult16模块

文章目录 (基础)半精度浮点数的表示和乘运算16位半精度浮点数浮点数的乘运算 floatMult16完整代码floatMult16代码逐步解析符号位sign判断指数exponent计算尾数fraction计算尾数fraction的标准化和舍位整合为最后的16位浮点数结果[sign,exponent,fraction] 其他变量宽度表alway…

Matplotlib 是一个广泛用于 Python 数据可视化的库

Matplotlib 是一个广泛用于 Python 数据可视化的库&#xff0c;它提供了丰富的绘图功能&#xff0c;允许用户创建各种类型的图表&#xff0c;从简单的折线图到复杂的三维图表&#xff0c;以及定制图形的各个方面。以下是Matplotlib的一些重要特点和常见用法&#xff1a; Matpl…

linux用户和权限命令学习记录

文章目录 版权声明root用户&#xff08;超级管理员&#xff09;su和exit命令sudo命令为普通用户配置sudo认证 用户、用户组管理用户组管理getent命令 查看权限控制认知权限信息 修改权限控制chmod修改文件、文件夹的权限权限的数字序号chown修改所属用户、用户组 版权声明 本博…

操作系统权限提升(二十八)之数据库提权-SQL Server 数据库安装

SQL Server 数据库安装 SQL Server介绍 SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。…