Gradle Kotlin如何调用父级中定义的函数?

时间:2019-08-28 10:53:52

标签: gradle kotlin build gradle-kotlin-dsl

在使用gradle多模块项目时,是否可以在父项目中定义功能,但可以在build.gradle.kts子模块中使用它们?

注意,我不需要使用字符串注册和调用无类型的任务...我希望将实际的类型安全代码共享给子模块。

理想情况下,无需创建插件或使用buildSrc。

从父级build.gradle.kts到所有子模块共享类的最重要的方式是什么?

注意:这与共享封闭槽扩展名不同...您松开了类型安全性,我要提供的是子模块侧的类型安全性。

1 个答案:

答案 0 :(得分:1)

我在想没有办法。编译Kotlin构建脚本时,它将以扩展了Build_gradle的默认包(即空包)中的名为CompiledKotlinBuildScript的类结尾。脚本中定义的任何类在其对应的Build_gradle中将成为公共嵌套类。子项目构建脚本被编译时,它无权访问包含父项目构建脚本的类路径。这是有道理的,因为同一(默认)包中将有多个Build_gradle文件。

我会去buildSrc来解决问题,但是我推测您还想要在多模块项目中很好地分离关注点,而没有无关的项目知道其他项目需要沟通。为了最大程度地减少这种暴露,您可以做的是仅将API(接口,数据类)保留在buildSrc中,并在提供实现的父项目中放置script plugin