首页 > 解决方案 > Gradle kotlin如何调用父级中定义的函数?

问题描述

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

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

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

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

注意:这与通过外部共享封闭槽不同......你失去了类型安全,我要求的是子模块方面的类型安全。

标签: gradlekotlinbuildgradle-kotlin-dsl

解决方案


我在想没有办法。当 Kotlin 构建脚本被编译时,它将最终成为一个Build_gradle在默认包(即空包)中调用的类,该类扩展了CompiledKotlinBuildScript. 在脚本中定义的任何类在其对应的Build_gradle. 当子项目构建脚本被编译时,它无法访问包含父项目构建脚本的类路径。Build_gradle这是有道理的,因为在同一个(默认)包中会有多个文件。

我会去buildSrc解决这个问题,但我推测你还想要的是在多模块项目中某种很好的关注点分离,而不是让不相关的项目知道其他人需要沟通什么。您可以做的以尽量减少暴露是只保留 API(接口、数据类)buildSrc并在父项目中使用脚本插件提供实现。


推荐阅读