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