-
-
Notifications
You must be signed in to change notification settings - Fork 0
Beginner Guide (Step‐by‐Step)
This guide is intended to describe a step-by-step process of using the project. It will cover the following:
-
Prerequisites
- Set up a Project (Maven)
- Define an OpenAPI Specification
- Set up
openapi-generator-maven-plugin
- Import
openapi-to-java-records-mustache-templates
as a dependency - Using
maven-dependency-plugin
to unpack mustache templates - Use mustache templates when generating classes
- Generate classes via
openapi-generator-maven-plugin
- Verifying generated classes
- Further customizations
These will likely already be fulfilled, however, for verification/experimental purposes, minimal examples will be provided to fulfill the prerequisites.
Self-explanatory, as the intention is to use openapi-generator-maven-plugin
to generate classes. No pom.xml
-file will be provided as an example.
The OpenAPI Specification (.yaml
/.yml
-file) is the source from which classes will be generated.
openapi: 3.0.0
info:
title: Example OpenAPI Spec.
version: 0.0.1
servers:
- url: http://localhost/
description: Irrelevant
paths:
/ignore:
get:
summary: Ignore
responses:
'200':
description: OK
components:
schemas:
ExampleRecord:
type: object
description: Example of a Record
properties:
field1:
type: boolean
description: a Boolean field
The project pom.xml
-file should include a <build>
-step using openapi-generator-maven-plugin
.
This should be placed within the root (<project>
) property.
<build>
<plugins>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.8.0</version>
<executions>
<execution>
<id>generate-example</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatorName>java</generatorName>
<generateModels>true</generateModels>
<inputSpec><!-- This is the relative path to the OpenAPI .yaml file --></inputSpec>
<templateDirectory><!-- This is the relative path to the .mustache template files --></templateDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
The project is officially hosted on GitHub Packages and Maven Central Repository. Regardless, the dependency will look something like:
<dependency>
<groupId>io.github.chrimle</groupId>
<artifactId>openapi-to-java-records-mustache-templates</artifactId>
<version><!-- Check for latest version --></version>
</dependency>
This will be used in the next step.
As a suggestion, maven-dependency-plugin
can be used to unpack the .mustache
-files from the imported artifact. For example:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version><!-- Check for latest version --></version>
<executions>
<execution>
<id>unpack-mustache-files</id>
<phase>validate</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>io.github.chrimle</groupId>
<artifactId>openapi-to-java-records-mustache-templates</artifactId>
<version><!-- Check for latest version --></version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
<includes>**/*.mustache</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<!-- openapi-generator-maven-plugin goes here (Prerequisite) -->
</plugins>
</build>
In this example, the .mustache
-files will be copied into ${project.basedir}/src/main/resources
.
In order to use custom templates when generating via openapi-generator-maven-plugin
, set the <templateDirectory>
-property to the relative path location of the .mustache
-files.
Tip
The <outputDirectory>
(Step 3) should match the <templateDirectory>
-property (Prerequisite Step 3).
To generate classes, compile the project via:
mvn compile
Unless the <output>
-property has been set in the build configuration, the generated class(es) should be found in ./target/generated-sources/openapi
. The generated record
class should look something like this:
/*
* Example OpenAPI Spec.
* An example OpenAPI-spec to generate example Java records.
*
* The version of the OpenAPI document: 0.0.1
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*
* This class was generated using custom mustache templates from
* openapi-to-java-records-mustache-templates. For further information,
* questions, requesting features or reporting issues, please visit:
* https://github.com/Chrimle/openapi-to-java-records-mustache-templates.
* Generated with Version: 2.5.0
*
*/
package org.openapitools.client.model;
import java.util.Objects;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.Arrays;
/**
* Example of a Record
*
* @param field1 a Boolean field
*/
public record ExampleRecord(
@javax.annotation.Nonnull Boolean field1) {
public ExampleRecord(
@javax.annotation.Nonnull final Boolean field1) {
this.field1 = field1;
}
}
This concludes the guide. Preferably, verify that the generated record
is correct before trying to generate classes from a larger OpenAPI Specification.
With the plugins and custom templates set up, further customizations can be made. OpenAPI Specifications has many options, but which/what/how/when it is reflected in the generated classes is primarily up to openapi-generator-maven-plugin
and its many <configuration>
and <configOption>
-properties. Finally, depending on the generated classes, it may be dependent on openapi-to-java-records-mustache-templates
. For these reasons, verify that this project supports the used properties/configurations:
- Supported OpenAPI Specification properties
- Supported 'openapi‐generator‐maven‐plugin' Configuration options
Please verify that they are listed as supported there. If not, please check if there is an open issue for it, or create one.
©️ 2024 Chrimle