我已经在 groovy 中实现了一个自定义任务。如果我为它提供一个在 groovy (X.groovy) 中实现的实用程序类并将其放置在buildsrc中,则该任务可以工作。如果我在 Java (Y.java) 中实现一个等效类并将其放在同一目录中,则任务将失败并显示以下错误消息:
:buildsrc:compileGroovystartup failed:
General error during conversion: Could not load class 'com.myinc.gradle.api.data.Y'
from file:/project/buildsrc/build/classes/main/com/myinc/gradle/api/data/Y.class.
Y.class 文件存在于错误消息中指定的位置。当 Y.java 位于以下任一位置时,构建失败:
buildsrc/src/main/groovy/.../Y.java<br>
buildsrc/src/main/java/.../Y.java
Gradle 文档说“您可以将构建源代码放在此目录中并坚持 Java/Groovy 项目的布局约定”,并且将应用其默认的 buildsrc 构建脚本。
资料来源:http ://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources
项目布局允许 Groovy 源目录包含 Groovy 和 Java 代码。
来源:http ://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec:groovyCompile
要复制:
项目/build.gradle:
task t (type: sample.MyTask) {
println "configuring task"
}
项目/buildsrc/src/main/groovy/sample
MyTask.groovy
package sample
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class MyTask extends DefaultTask {
@TaskAction
public void task() {
println 'task action'
new X().m()
// new Y().m() // uncommenting this line should generate an error when you build 't'
}
}
X.groovy
package sample;
class X {
void m() {
println "x.m"
}
}
Y.java
package sample;
public class Y {
void m() {
System.out.println("y.m");
}
}
OSX 10.8.4、IntelliJ 12.1、Gradle 1.8