Skip to main content
Version: 7.x.x

Maven Plugin SDL Usage

GraphQL Kotlin follows a code-first approach where schema is auto generated from your source code at runtime. GraphQL Kotlin plugins can be used to generate schema as a build time artifact. This allows you to seamlessly integrate with various GraphQL tools that may require a schema artifact as an input (e.g. to perform backwards compatibility checks, etc).

Generating SDL

GraphQL schema can be generated directly from your source code using reflections. generate-sdl mojo will scan your classpath looking for classes implementing Query, Mutation and Subscription marker interfaces and then generates the corresponding GraphQL schema using graphql-kotlin-schema-generator and default NoopSchemaGeneratorHooks. In order to limit the amount of packages to scan, this mojo requires users to provide a list of packages that can contain GraphQL types.

<plugin>
<groupId>com.expediagroup</groupId>
<artifactId>graphql-kotlin-maven-plugin</artifactId>
<version>${graphql-kotlin.version}</version>
<executions>
<execution>
<goals>
<goal>generate-sdl</goal>
</goals>
<configuration>
<packages>
<package>com.example</package>
</packages>
</configuration>
</execution>
</executions>
</plugin>

Using Custom Hooks Provider

Plugin will default to use NoopSchemaGeneratorHooks to generate target GraphQL schema. If your project uses custom hooks or needs to generate the federated GraphQL schema, you will need to provide an instance of SchemaGeneratorHooksProvider service provider that will be used to create an instance of your custom hooks.

generate-sdl mojo utilizes ServiceLoader mechanism to dynamically load available SchemaGeneratorHooksProvider service providers from the classpath. Service provider can be provided as part of your project, included in one of your project dependencies or through explicitly provided artifact. See Schema Generator Hooks Provider for additional details on how to create custom hooks service provider. Configuration below shows how to configure GraphQL Kotlin plugin with explicitly provided artifact to generate federated GraphQL schema.

<plugin>
<groupId>com.expediagroup</groupId>
<artifactId>graphql-kotlin-maven-plugin</artifactId>
<version>${graphql-kotlin.version}</version>
<executions>
<execution>
<goals>
<goal>generate-sdl</goal>
</goals>
<configuration>
<packages>
<package>com.example</package>
</packages>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.expediagroup</groupId>
<artifactId>graphql-kotlin-federated-hooks-provider</artifactId>
<version>${graphql-kotlin.version}</version>
</dependency>
</dependencies>
</plugin>