如何将 Gradle 脚本插件变成二进制插件

2024-06-19

我有一堆像这样的 gradle 脚本插件https://github.com/docToolchain/docToolchain/blob/master/scripts/exportExcel.gradle https://github.com/docToolchain/docToolchain/blob/master/scripts/exportExcel.gradle并希望将它们变成“真正的”二进制插件,以便轻松分发它们。

我知道我可以通过 http 构建来引用脚本插件,但这并不像真正的插件那么好。

正如我所看到的,编写插件的一种方法是实现org.gradle.api.Plugin界面。这基本上意味着我必须重写所有 mit 脚本插件。

有没有其他方法可以轻松地将它们变成二进制插件?也许某种包装?


您的脚本似乎可以轻松转换为插件。

你为什么说你必须重写你的脚本?据我所知,这基本上是更改一些小细节并添加所有样板/元数据的问题。

我写了很多插件,这里是一个非常简单的插件:https://github.com/renatoahaydes/pony-gradle-plugin https://github.com/renatoathaydes/pony-gradle-plugin

这是您需要更改才能制作真正的插件的内容:

  1. 为您最喜欢的 JVM 语言创建一个普通的 Gradle 项目。
  2. In the buildScript块,添加类路径依赖com.gradle.publish:plugin-publish-plugin:0.9.10并应用com.gradle.plugin-publish插入。Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/build.gradle#L10.
  3. 添加编译依赖gradleApi(). Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/build.gradle#L31.
  4. Add a pluginBundle配置到构建文件。Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/build.gradle#L91.
  5. 创建一个类来实现org.gradle.api.Plugin<org.gradle.api.Project>界面。Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/src/main/groovy/com/athaydes/gradle/pony/PonyPlugin.groovy.
  6. 在里面配置插件apply方法(它给你一个句柄Project)。这包括将您可能需要的任何任务添加到项目中。
  7. 创建一个类扩展org.gradle.api.DefaultTask(通常)针对每个任务。Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/src/main/groovy/com/athaydes/gradle/pony/PonyPlugin.groovy#L62.
  8. 在某个方法中实现任务的逻辑,用注释来注释该方法@org.gradle.api.tasks.TaskAction. Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/src/main/groovy/com/athaydes/gradle/pony/PonyPlugin.groovy#L93.
  9. 创建一个描述符META-INF/gradle-plugins/plugin-name.properties带有类似的条目implementation-class=your.plugin.Class. Example https://github.com/renatoathaydes/pony-gradle-plugin/blob/master/src/main/resources/META-INF/gradle-plugins/com.athaydes.pony.properties.

基本上就是这样!

您可能想让插件可配置,Gradle 文档 https://docs.gradle.org/current/userguide/custom_plugins.html#sec:getting_input_from_the_build展示如何做到这一点,但为了方便起见,这里是他们当前的示例:

class GreetingPluginExtension {
  String message = 'Hello from GreetingPlugin'
}

class GreetingPlugin implements Plugin<Project> {
  void apply(Project project) {
    // Add the 'greeting' extension object
    def extension = project.extensions.create('greeting', GreetingPluginExtension)
    // Add a task that uses configuration from the extension object
    project.task('hello') {
        doLast {
            println extension.message
        }
    }
  }
}

然后可以在用户的​​构建文件中使用它,如下所示:

greeting {
    message = 'Hi'
}

要在 Gradle 门户中实际发布插件,您需要创建一个帐户...see this https://plugins.gradle.org/docs/submit更多细节。 (或者您可以将其发布到 Bintray 上,但是对于您的用户来说应用您的插件会有点尴尬 - 另一方面 Bintray 作为存储库要好得多,所以我最终两者都做了,请参阅上面的示例)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Gradle 脚本插件变成二进制插件 的相关文章

随机推荐

  • 我应该在 Promise.all 中使用 wait 吗?

    我正在构建快速中间件 以对数据库进行两次异步调用 以检查用户名或电子邮件是否已在使用中 这些函数返回的承诺没有捕获 因为我想将数据库逻辑与 req res next 逻辑分开 并且我有集中的错误处理 需要next作为一个论点 在我对本地环境
  • 我想自动生成这种格式的账单编号 (INV1/23) 并且它必须以 1 递增

    我想以这种格式 INV1 23 自动生成帐单号码 而不使用oracle apex中的序列 请在plsql中编写查询 我在此过程中使用了序列 但它对此不起作用 它必须以表格形式显示在交互式报告上 就像当我输入有关账单的数据 例如订单号 订单日
  • 将 std::make_unique 与自定义删除器一起使用

    在使用std unique ptr带有我想要使用的自定义删除器std make unique而不是全新的 我用的是VC 2013 在我看来 没有办法使用std unique ptr如果您使用自定义删除器 我错过了什么还是事实确实如此 附加信
  • Angularjs 范围之外的服务功能

    我在 angularJS 中创建了一个服务 它使用 btford socket io 模块与服务器交互 由于在服务中我已经实现了一些目前在 Angular 内部使用的 API 但为了以后扩展应用程序 我还需要在 Angular 范围之外提供
  • 在 woocommerce 管理订单页面中单击自定义按钮运行函数

    基于 在 woocommerce 中的管理订单列表顶部添加一个按钮 https stackoverflow com questions 49437781 add a button on top of admin orders list in
  • 无法理解寄存器和变量之间的汇编mov指令

    我在 64 位 Linux 上使用 NASM 汇编器 有一些关于变量和寄存器的东西我无法理解 我创建一个名为 msg 的变量 msg db hello world 现在 当我想写入标准输出时 我移动msg to rsi注册 但我不明白mov
  • 为什么 strcpy 的这种使用被认为是不好的?

    我发现了下面的一段C代码 标记为 BAD 又名缓冲区溢出错误 问题是我不太明白为什么 输入字符串长度在分配等之前被捕获 char my strdup const char s size t len strlen s 1 char c mal
  • Erlang:到 Python 实例的端口没有响应

    我正在尝试通过 Erlang 端口与外部 python 进程进行通信 首先 打开一个端口 然后通过 stdin 将消息发送到外部进程 我期待在进程的标准输出上得到相应的答复 我的尝试如下所示 open a port Port open po
  • Python Pandas 滚动聚合一列列表

    我有一个简单的数据框 df 和一列列表lists 我想根据以下内容生成一个附加列lists The df好像 import pandas as pd lists 1 1 2 1 2 3 3 2 9 7 9 4 2 7 3 5 create
  • 熊猫按 n 最大总和分组

    我正在尝试使用groupby nlargest and sum在 Pandas 中一起运行 但在运行时遇到困难 State County Population Alabama a 100 Alabama b 50 Alabama c 40
  • RxJ 从 observable 中获取价值

    在组件中 singleEvent Observable
  • Ember-cli 夹具加载

    我确信我错过了一些小而愚蠢的东西 但似乎无法加载我的装置 这是我有 应用程序 模型 todos js import DS from ember data var Todo DS Model extend title DS attr stri
  • 在 Windows 中使用 PHP 创建受密码保护的 Zip 文件

    我正在 PHP 中创建给定文件的 zip 文件 下面是函数 function create zip file file name zip new ZipArchive zip name file name zip Zip name zip
  • SVN 提交后挂钩在提交后不会运行

    我的服务器上设置了 SVN 存储库 并且遇到提交后问题 我在 iMac 上使用 SmartSVN 作为客户端 我通过 SmartSVN 的 ssh svn 连接 我能够成功连接到 SVN 并对其进行更改 但从 SVN 客户端提交后 我的提交
  • 将 url 参数获取到 asp.net 标签中

    我试图自动将 asp label 的文本设置为 url 参数 但它似乎不起作用 这是我的代码
  • 响应式 CSS 图像锚点标签 - 图像地图样式

    我一直在开发一个响应式网站 并且在图像映射方面遇到了一些问题 图像映射似乎不适用于基于百分比的坐标 经过一番谷歌搜索后 我发现了一个 JS 解决方法 http mattstow com experiment responsive image
  • 枚举类型在打字稿中给出双数组

    我想从枚举数据类型创建一个下拉列表 但是当我尝试将枚举更改为具有名称和值的对象时 枚举数组返回枚举成员的两倍 使用函数这个帖子 https stackoverflow com questions 18111657 how does one
  • 为什么动态 qml 对象的创建如此缓慢,有哪些合理的替代方案?

    我想要实现的目标类似于棋盘游戏 有一个100 100的网格 放在一个Item它驻留在一个Flickable 游戏板 的各个矩形都是 svg 图像 目前大约有 20 种 可能会增加到数百种 作为基准测试 我只是尝试用元素填充 世界 Compo
  • Google Cloud Console 免费试用期满后恢复虚拟机实例

    我已经搜索了我的问题 但很惊讶没有找到答案 因为这一定是相当常见的情况 我的谷歌云控制台免费试用版大约两个月前就过期了 而我却没有意识到 我现在已升级到付费帐户 但我的 Wordpress VM 实例不再存在 事实上 没有虚拟机实例 Goo
  • 如何将 Gradle 脚本插件变成二进制插件

    我有一堆像这样的 gradle 脚本插件https github com docToolchain docToolchain blob master scripts exportExcel gradle https github com d