如何解决是否可以在 Gradle 中创建双重继承的自定义任务?
我正在使用一堆外部库开发 Gradle(Groovy,而不是 Kotlin)库,我们有一个案例,我们希望通过外部库提供的自定义任务在我们的代码中实现双重继承. (作为参考,该库特别是 MarkLogic DataHub,我们正在扩展 RunFlowTask,但我已针对此示例进行了一些概括。引入了一些限制,但我相当确定它们都可以工作周围。)
我想要的是以下内容:
ClassA.gradle
class ClassA extends com.external.plugin.TaskA {}
ClassB.gradle
import com.fasterxml.jackson.databind.ObjectMapper
class ClassB extends ClassA {}
...对事情需要的位置没有限制,只是它可以工作。值得注意的是,我们有一堆像 ClassA 这样的例子可以独立工作,我只需要再次扩展 ClassA。
我在下面详细介绍了我为使其工作而进行的一些尝试;任何关于我做错了什么的反馈都非常受欢迎,或者如果有关于构建事物的全新方式的任何建议,也非常感谢。
第一次尝试:
apply from: './ClassA'
apply from: './ClassB'
=>
ClassB.gradle 中的“无法解析类 ClassA”,考虑到我对 Gradle 编译如何工作的了解,这很有意义。我尝试用 class ClassB...
替换 println ClassB
只是为了查看,并且打印没有问题。让我觉得 ClassA 需要提前编译,所以我很确定我在这里没有做错任何事情,它只是不起作用。
第二次尝试:
buildSrc/src/main/groovy/ClassA.gradle 存在并且和上面一样。
buildSrc/build.gradle
import com.fasterxml.jackson.databind.ObjectMapper
buildscript {
repositories { }
dependencies {
classpath filetree(dir: '/path/to/dependencies',include: '*.jar') // includes jackson
}
}
println ObjectMapper
println
有效,但我明白了:
/path/to/src/main/groovy/ClassA.groovy: 1: unable to resolve class com.fasterxml.jackson.databind.ObjectMapper
@ line 1,column 1.
import com.fasterxml.jackson.databind.ObjectMapper
...如果我将 buildscript
块复制到 ClassA
子模块中,或者如果我从 ClassA
子模块中删除导入,同样的事情。我的问题是我的导入有什么问题吗?似乎这应该有效,并且导入应该有效,但它们没有。
第三次尝试:
在此保留一些代码示例:我非常接近将 buildSrc
复制到 includeBuild
文件夹中,并且 ClassA
可作为顶级项目中的 TaskReference 访问,但我不知道如何从那里extend ClassA
。
gradle.includedBuild('subbuild').task(':ClassA')
=> org.gradle.composite.internal.IncludedBuildTaskReference
gradle.includedBuild('subbuild').task(':UPMCRunFlowTask').resolveTask()
=> Task with path ':ClassA' not found in project ':subbuild'.
我的问题是有没有办法回溯到类引用,以便它实际上是可扩展的?我尝试深入研究设置一个 include './subbuild'
子项目并遇到了类似的问题。
欢迎任何帮助/建议 - 谢谢!
解决方法
答案是第二次尝试。在 build.gradle
中,它需要:
repositories {}
dependencies {
implementation fileTree(dir: '/path/to/deps',include: ['*.jar'])
}
...子文件中不需要任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。