Gradle kotlin如何调用parent中定义的函数?

Gradle kotlin how to call function defined in parent?

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

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

最好不要创建插件或使用 buildSrc。

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

注意:这与通过 ext 共享闭包不同...你松散了类型安全,我要求的是子模块端的类型安全。

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

我会选择 buildSrc 来解决问题,但我推测您还想要的是在多模块项目中某种很好的关注点分离,而不是让不相关的项目知道其他人需要沟通的内容。您可以做的是尽量减少曝光,只保留 API(接口,数据 classes)在 buildSrc 中,并在父项目中有一个 script plugin 提供实现.