我正在尝试创建一个自定义任务/插件(两者都拒绝工作)以在我的 gradle 构建脚本中使用。
我正在使用 groovy 插件,并且想要在单独的文件中声明任务/插件,而不是在我的 build.gradle 中。
我的项目树如下:
/project
.
|-gradle
|-src
|---main
|-----groovy
|-----java
|-----resources
|---test
|-----groovy
|-----java
|-----resources
|-build.gradle
我试图做的是在 src/main/groovy
中创建我的任务/插件类,然后在我的 build.gradle
中使用它们。
让我举一个小例子。
src/main/groovy/mypackage/
TestTask.groovy:
package org.gradle.mypackage
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
public class TestTask extends DefaultTask {
@TaskAction
def doAction() {
}
}
build.gradle
plugins {
id 'groovy'
}
sourceCompatibility = 1.7
repositories {
mavenCentral()
}
dependencies {
compile(
localGroovy(),
gradleApi()
)
testCompile(
[ group: 'junit', name: 'junit', version: '4.11' ]
)
}
task testTask(type: TestTask)
当我尝试使用 gradle.build 执行任何操作(清理、构建等)时,出现以下错误:
Error:(116, 0) Could not find property 'TestTask' on root project 'project'.
我做错了什么?我尝试使用 import mypackage.TestTask
在 build.gradle
中导入
任务,但这也不起作用。
在我看来,从我在 docs 中读到的内容来看,groovy 文件根本无法编译。 gradle 应该负责编译并将它们添加到类路径中。
最佳答案
给你:“in-stackoverflow”解决方案。
在您的项目中创建文件夹 buildSrc/src/main
不要忘记在buildSrc/中创建build.gradle
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
现在在主文件夹中创建包含您的任务的包,例如:pl.myAwesomeCompany.gradle.tasks
package pl.myAwesomeCompany.gradle.tasks
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class ExampleTask extends DefaultTask {
@TaskAction
void execute(IncrementalTaskInputs inputs) {
println inputs.incremental ? "CHANGED inputs considered out of date"
: "ALL inputs considered out of date"
}
}
瞧!现在在您的项目中您可以使用您的插件:
import package pl.myAwesomeCompany.gradle.tasks.ExampleTask
task incremental(type:ExampleTask)
关于groovy - gradle 中的自定义任务/插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380086/