Gradle plugin configuration
Minimal configuration
Apollo Kotlin's default configuration works for the majority of use cases. It requires a service name and a package name:
Kotlin
1apollo { 2 // Use "service" as a service name. 3 // A service has a single schema and represent a single schema. 4 // You can have several services in a single app. 5 service("service") { 6 // The package name used for generated code. 7 packageName.set("com.example") 8 } 9}All options
For more advanced usages, below are all Apollo Gradle Plugin options in a single code block. You can also take a look at the Gradle Plugin recipes.
Please refer to the ApolloExtension and Service API reference for details about a specific API.
Kotlin
1apollo { 2 service("service") { 3 // The package name for the generated models 4 packageName.set("com.example") 5 6 // Adds the given directory as a GraphQL source root 7 srcDir("src/main/graphql") 8 // Operation files to include. 9 includes.add("**/*.graphql") 10 // Operation files to exclude. 11 excludes.add("**/*.graphqls") 12 13 // Explicitly set the schema 14 schemaFiles.from("src/main/graphql/schema.graphqls") 15 // Extend your schema locally with type extensions 16 schemaFiles.from("shared/graphql/schema.graphqls", "shared/graphql/extra.graphqls") 17 18 // What codegen to use. One of "operationBased", "responseBased" 19 codegenModels.set("operationBased") 20 21 // Warn if using a deprecated field 22 warnOnDeprecatedUsages.set(true) 23 // Fail on warnings 24 failOnWarnings.set(true) 25 26 // Map the "Date" custom scalar to the com.example.Date Kotlin type 27 mapScalar("Date", "com.example.Date") 28 // Shorthands to map scalar to builtin types and configure their adapter at build time 29 mapScalarToUpload("Upload") 30 mapScalarToKotlinString("MyString") 31 mapScalarToKotlinInt("MyInt") 32 mapScalarToKotlinDouble("MyDouble") 33 mapScalarToKotlinFloat("MyFloat") 34 mapScalarToKotlinLong("MyLong") 35 mapScalarToKotlinBoolean("MyBoolean") 36 mapScalarToKotlinAny("MyAny") 37 mapScalarToJavaString("MyString") 38 mapScalarToJavaInteger("MyInteger") 39 mapScalarToJavaDouble("MyDouble") 40 mapScalarToJavaFloat("MyFloat") 41 mapScalarToJavaLong("MyLong") 42 mapScalarToJavaBoolean("MyBoolean") 43 mapScalarToJavaObject("MyObject") 44 45 46 // The format to output for the operation manifest. One of "operationOutput", "persistedQueryManifest" 47 operationManifestFormat.set("persistedQueryManifest") 48 // The file where to write the operation manifest 49 operationManifest.set(file("build/generated/persistedQueryManifest.json")) 50 51 // Whether to generate Kotlin or Java models 52 generateKotlinModels.set(true) 53 // Target language version for the generated code. 54 languageVersion.set("1.5") 55 // Whether to suffix operation name with 'Query', 'Mutation' or 'Subscription' 56 useSemanticNaming.set(true) 57 // Whether to generate kotlin constructors with `@JvmOverloads` for more graceful Java interop experience when default values are present. 58 addJvmOverloads.set(true) 59 // Whether to generate Kotlin models with `internal` visibility modifier. 60 generateAsInternal.set(true) 61 // Whether to generate default implementation classes for GraphQL fragments. 62 generateFragmentImplementations.set(true) 63 // Whether to write the query document in models 64 generateQueryDocument.set(true) 65 // Whether to generate the Schema class. 66 generateSchema.set(true) 67 // Name for the generated schema 68 generatedSchemaName.set("Schema") 69 // Whether to generate operation variables as [com.apollographql.apollo.api.Optional] 70 generateOptionalOperationVariables.set(true) 71 // Whether to generate the type safe Data builders. 72 generateDataBuilders.set(true) 73 // Whether to generate response model builders for Java. 74 generateModelBuilders.set(true) 75 // Which methods to auto generate (can include: `equalsHashCode`, `copy`, `toString`, or `dataClass`) 76 generateMethods.set(listOf("dataClass")) 77 // Whether to generate fields as primitive types (`int`, `double`, `boolean`) instead of their boxed types (`Integer`, `Double`, etc..) 78 generatePrimitiveTypes.set(true) 79 // Opt-in Builders for Operations, Fragments and Input types. Builders are more ergonomic than default arguments when there are a lot of 80 // optional arguments. 81 generateInputBuilders.set(true) 82 // The style to use for fields that are nullable in the Java generated code 83 nullableFieldStyle.set("apolloOptional") 84 // Whether to decapitalize field names in the generated models (for instance `FooBar` -> `fooBar`) 85 decapitalizeFields.set(false) 86 87 // Whether to add the [JsExport] annotation to generated models. 88 jsExport.set(true) 89 // When to add __typename. 90 addTypename.set("always") 91 // Whether to flatten the models. File paths are limited on MacOSX to 256 chars and flattening can help keeping the path length manageable 92 flattenModels.set(true) 93 // A list of [Regex] patterns for GraphQL enums that should be generated as Kotlin sealed classes instead of the default Kotlin enums. 94 sealedClassesForEnumsMatching.set(listOf(".*")) 95 // A list of [Regex] patterns for GraphQL enums that should be generated as Java classes. 96 classesForEnumsMatching.set(listOf(".*")) 97 // Whether fields with different shape are disallowed to be merged in disjoint types. 98 fieldsOnDisjointTypesMustMerge.set(false) 99 100 101 // The directory where the generated models are written. 102 outputDir.set(file("build/generated/apollo")) 103 104 // Whether to generate Apollo metadata. Apollo metadata is used for multi-module support. 105 generateApolloMetadata.set(true) 106 // list of [Regex] patterns matching for types and fields that should be generated whether they are used by queries/fragments in this module or not. 107 alwaysGenerateTypesMatching.set(listOf(".*")) 108 // Reuse the schema from an upstream module 109 dependsOn(project(":schema")) 110 // Compute used types from a downstream module 111 isADependencyOf(project(":feature")) 112 113 // configure introspection schema download 114 introspection { 115 endpointUrl.set("https://your.domain/graphql/endpoint") 116 schemaFile.set(file("src/main/graphql/com/example/schema.graphqls")) 117 } 118 // configure registry schema download 119 registry { 120 key.set(System.getenv("APOLLO_KEY")) 121 graph.set(System.getenv("APOLLO_GRAPH")) 122 schemaFile.set(file("src/main/graphql/com/example/schema.graphqls")) 123 } 124 // configure a compiler plugin 125 plugin(project(":apollo-compiler-plugin")) { 126 argument("myarg", "someValue") 127 } 128 // wire the generated models to the "test" source set 129 outputDirConnection { 130 connectToKotlinSourceSet("test") 131 } 132 } 133 134 // Make IDEA aware of codegen and will run it during your Gradle Sync, default: false 135 generateSourcesDuringGradleSync.set(true) 136 137 // Link sqlite for Kotlin native projects 138 linkSqlite.set(true) 139}