在使用gradle多模块项目时,是否可以在父项目中定义函数,但可以在子模块build.gradle.kts中使用它们?
注意我不需要用字符串注册和调用无类型的任务...我希望将实际的类型安全代码共享给子模块。
理想情况下,无需创建插件或使用buildSrc。
从父级build.gradle.kts到所有子模块共享类的最重要的方式是什么?
注意:这与共享封闭槽扩展名不同...您松开了类型安全性,我要的是子模块侧的类型安全性。
最佳答案
我在想没有办法。编译Kotlin构建脚本时,它将以扩展Build_gradle
的默认包(即空包)作为名为CompiledKotlinBuildScript
的类结束。脚本中定义的任何类都将在其对应的Build_gradle
中成为公共(public)嵌套类。子项目构建脚本被编译时,它无权访问包含父项目构建脚本的类路径。这是有道理的,因为在同一个(默认)包中将有多个Build_gradle
文件。
我会选择buildSrc
来解决问题,但是我推测您还想要在多模块项目中实现某种形式的关注点分离,而让不相关的项目知道其他人需要交流什么。为了最大程度地减少这种暴露,您可以做的只是将API(接口(interface),数据类)保留在buildSrc
中,并在父项目中提供script plugin以提供实现。