如何将Gradle脚本插件转换为二进制插件

如何将Gradle脚本插件转换为二进制插件,gradle,gradle-plugin,Gradle,Gradle Plugin,我有一堆像这样的gradle脚本插件,我想把它们变成“真正的”二进制插件,以便轻松地分发它们 我知道我可以通过http从构建中引用脚本插件,但这不如真正的插件好 如我所见,编写插件的一种方法是实现org.gradle.api.plugin接口。这基本上意味着我必须重写所有mit脚本插件 有没有其他方法可以轻松地将它们转换为二进制插件?也许是某种包装?您的脚本似乎很容易转换为插件 你为什么说你必须重写你的脚本?据我所知,这基本上是一个更改一些小细节并添加所有样板/元数据的问题 我已经编写了很多插件

我有一堆像这样的gradle脚本插件,我想把它们变成“真正的”二进制插件,以便轻松地分发它们

我知道我可以通过http从构建中引用脚本插件,但这不如真正的插件好

如我所见,编写插件的一种方法是实现
org.gradle.api.plugin
接口。这基本上意味着我必须重写所有mit脚本插件


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

您的脚本似乎很容易转换为插件

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

我已经编写了很多插件,这里有一个非常简单的插件:

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

  • 为您喜爱的JVM语言创建一个普通的Gradle项目
  • buildScript
    块中,在
    com.gradle.publish:plugin publish plugin:0.9.10
    上添加类路径依赖项,并应用
    com.gradle.plugin publish
    插件
  • gradleApi()
    上添加编译依赖项
  • pluginBundle
    config添加到生成文件中
  • 创建一个实现
    org.gradle.api.Plugin
    接口的类
  • apply
    方法中配置插件(该方法为
    Project
    提供句柄)。这包括将您可能需要的任何任务添加到项目中
  • 为每个任务创建一个扩展
    org.gradle.api.DefaultTask
    (通常)的类
  • 在某些方法中实现任务的逻辑,用
    @org.gradle.api.tasks.TaskAction
    注释该方法
  • META-INF/gradle-plugins/plugin-name.properties
    中创建一个描述符,其条目类似于
    implementation class=your.plugin.class
    基本上就是这样

    您可能希望使插件可配置,并演示如何进行配置,但为了方便起见,下面是他们当前的示例:

    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
            }
        }
      }
    }
    
    要在Gradle门户中实际发布插件,您需要创建一个帐户。。。更多细节。(或者你可以将其发布在Bintray上,但是用户应用插件时会有点尴尬——另一方面,Bintray作为一个存储库要好得多,所以我最终两者都做了,见上面的示例)

    greeting {
        message = 'Hi'
    }