3

为了简化我的构建,我想从“build.gradle”中提取自定义插件并将它们放入单独的 gradle 文件中。

这是我能想到的最简单的例子。


1. 在 build.gradle (WORKS) 中定义一个插件

以下“build.gradle”:

apply plugin: GreetingPlugin

class GreetingPlugin implements Plugin<Project> {

    void apply(Project project) {

        project.task('hello') << {
            println "Hello, World"
        }
    }
}

当你运行时:

gradle hello

产生:

:hello
Hello, World

BUILD SUCCESSFUL


2. 从 build.gradle 中提取插件 (DOESN'T WORK)

我想将插件定义移动到另一个文件“hello.gradle”中:

class GreetingPlugin implements Plugin<Project> {

    void apply(Project project) {

        project.task('hello') << {
            println "Hello, World"
        }
    }
}

并将“build.gradle”更改为:

apply from: 'hello.gradle'
apply plugin: GreetingPlugin

现在当我运行时:

gradle hello

它产生:

FAILURE: Build failed with an exception.

* Where:
Build file 'build.gradle' line: 2

* What went wrong:
A problem occurred evaluating root project 'gradle-problem'.
> Could not find property 'GreetingPlugin' on root project 'gradle-problem'.

BUILD FAILED

Total time: 1.723 secs

我相信这一定是可能的,那么你是怎么做到的呢?

4

1 回答 1

2

我找到了两个合理的解决方案:

1.在外部文件中应用插件

你好.gradle:

应用插件:GreetingPlugin

类 GreetingPlugin 实现 Plugin<Project> {

    无效申请(项目项目){

        project.task('hello').doLast {
            println "你好,世界"
        }
    }
}

构建.gradle:

apply from: 'hello.gradle'


2.通过将插件类添加到ext属性来导出插件类

你好.gradle:

类 GreetingPlugin 实现 Plugin<Project> {

    无效申请(项目项目){

        project.task('hello').doLast {
            println "你好,世界"
        }
    }
}

ext.GreetingPlugin = GreetingPlugin

构建.gradle:

apply from: 'hello.gradle'
apply plugin: GreetingPlugin
于 2013-10-29T19:24:56.127 回答