我正在尝试创建一个自定义任务/插件(两者都拒绝工作),以便在我的gradle构建脚本中使用。
我正在使用groovy插件,并希望在单独的文件中声明Tasks / Plugins,而不是在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(清理,构建等)做任何事情时,我收到以下错误:
错误:(116,0)无法在根项目'project'上找到属性'TestTask'。
我做错了什么?我尝试使用import
build.gradle
import mypackage.TestTask
中的{{1}}任务,但这也无效。
在我看来,groovy文件完全不能编译,而我在docs gradle中读到的内容应该注意编译并在类路径中添加它们。
答案 0 :(得分:2)
在这里:“in-stackoverflow”解决方案。
在你的项目中创建文件夹buildSrc / src / main
不要忘记在buildSrc /
中创建build.gradleapply 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)
答案 1 :(得分:-1)
这不是它的工作原理。如果您需要提供在包中组织的自定义插件和任务,请将整个代码放在buildSrc
目录下。在$GRADLE_HOME/samples/multiProjectBuildSrc
下你可以找到一个很好的例子。
$GRADLE_HOME
- gradle安装目录。