Gradle从另一个项目中引用任务类型

时间:2016-04-05 06:53:58

标签: gradle

这是文件结构:

/some/project/a.gradle
/some/project/common/subproject/b.gradle

在文件a.gradle中,我有:

apply plugin: "java"
class ClassThatExtendsDefaultTask extends DefaultTask {
  ...
}

在文件b.gradle中:

apply from: "$rootDir/a.gradle"
task someTask(type: ClassThatExtendsDefaultTask) {
  ...
}
compileTestJava.dependsOn someTask

然而,当我进行gralew测试时,我得到了:

Task with path 'ClassThatExtendsDefaultTask' not found in project ':common:subproject'.

所以我的问题是如何在另一个文件中引用java任务?我将ClassThatExtendsDefaultTask从a.gradle复制到b.gradle,它确实有效。

1 个答案:

答案 0 :(得分:0)

看起来你应该考虑将类移到buildSrc。也就是说,将类提取到文件ClassThatExtendsDefaultTask.groovy并将其放在文件夹' [rootDir] / buildSrc / src / main / groovy' ([rootDir]是项目的根目录)。

您还应该考虑将其放在该目录下的包中,但如果是这样,您将需要导入或完全限定类名。

有几个好处。它在所有子项目中编译和可用。你可以编写测试代码(buildSrc本身就是一个groovy项目)。

请参阅:gradle buildSrc doc