多模块代码生成
对于多模块项目,
ⓘ 注意
此页面用于在模块间共享架构和在不同模块中定义您的
设置
在你的架构模块中,通过为下游功能模块生成元数据来启用多模块功能
// schema/build.gradle.ktsapollo {service("service") {packageName.set("schema")// Enable generation of metadata for use by downstream modulesgenerateApolloMetadata.set(true)// If you need to specify the location of your schema filesschemaFiles.from(/*...*/)// Scalar mappings and generateDataBuilders must be defined in the schema modulemapScalar(/*...*/)generateDataBuilders.set(true)// Other options can be different between modules.// If you want those options to be applied to all modules, use a convention plugin and shared build logic.useSemanticNaming.set(true)generateFragmentImplementations.set(true)}}
在你的功能模块中,将架构模块声明为依赖项
// feature/build.gradle.ktsapollo {// Service names must matchservice("service") {packageName.set("feature")// The 'feature' depends on the 'schema' moduledependsOn(project(":schema"))}}
自动检测使用的类型
对于大型架构,这可能会生成大量代码并显著增加您的构建时间。在这种情况下,您可以启用自动检测使用的类型。
// schema/build.gradle.ktsapollo {service("service") {packageName.set("schema")generateApolloMetadata.set(true)isADependencyOf(project(":feature"))// list all your feature modules hereisADependencyOf(project(":feature2"))// ...}}
一旦启用了自动检测已用类型的选项,就像上面那样,所有模块都需要是双向链接的。否则,功能模块会因为缺少架构类而无法编译。所有模块都应该像上面那样双向链接。如果不是这样,功能模块会因为缺少某些架构类而编译失败。
双向参数(实验性)
使用 isADependencyOf()
需要在架构模块中列出所有功能模块,这会重复代码。为了保持尽可能简单并自动配置依赖关系,请使用 bidirectional = true
:
// feature/build.gradle.ktsapollo {service("service") {packageName.set("feature")// Use `bidirectional` to have the schema module get the used types from this moduledependsOn(dependencyNotation = project(":schema"), bidirectional = true)}}
该 bidirectional
参数是实验性的,且与 Gradle 项目隔离 不兼容。