我一直试图通过user guide。这似乎是我想要做的非常简单的事情,但我无法弄清楚如何让它发挥作用。
我想写一个外部groovy文件来定义一个任务,然后在build.gradle
中调用该任务。这是我的build.gradle
文件:
// Apply the groovy plugin to add support for Groovy
apply plugin: 'groovy'
// In this section you declare where to find the dependencies of your project
repositories {
// Use 'jcenter' for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
// In this section you declare the dependencies for your production and test code
dependencies {
// We use the latest groovy 2.x version for building this library
compile 'org.codehaus.groovy:groovy-all:2.4.7'
compile gradleApi()
compile localGroovy()
// We use the awesome Spock testing and specification framework
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'junit:junit:4.12'
}
task myTask (type: my.package.MyTask)
然后,在src/main/groovy/my/package
下我MyTask.groovy
:
package my.package
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class MyTask extends DefaultTask {
String greeting = 'hello from MyTask'
@TaskAction
def greet(){
println greeting
}
}
我甚至无法列出任务:
$ gradle tasks
FAILURE: Build failed with an exception.
* Where:
Build file '/projects/gradle/build.gradle' line: 21
* What went wrong:
A problem occurred evaluating root project 'gradle'.
> Could not get unknown property 'my' for root project 'gradle' of type org.gradle.api.Project.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 3.193 secs
此时,我完全不知道发生了什么或如何做我想做的事。这似乎是最简单的可能示例,但遵循用户指南却让我无处可去。无论我做什么,我都无法超越这个例外。
如何编写groovy文件并使用它来在构建文件中定义新任务?
答案 0 :(得分:1)
您必须将groovy文件放在:
下rootProjectDir/buildSrc/src/main/groovy
参考: https://docs.gradle.org/current/userguide/custom_tasks.html#N14573
修改强>
我从未尝试更改buildSrc
的位置,但似乎是一个未解决的问题:
https://issues.gradle.org/browse/GRADLE-2816
(如果我错了,请更正)
答案 1 :(得分:1)
现在您已将src移至buildSrc,您还需要修复MyTask.groovy中的小错误:
而不是
import org.gradle.api.tasks.DefaultTask
使用
import org.gradle.api.tasks.TaskAction
应该修复你的@TaskAction
注释。