Back to Openapi Generator

README

modules/openapi-generator-maven-plugin/README.md

7.22.017.9 KB
Original Source

openapi-generator-maven-plugin

A Maven plugin to support the OpenAPI generator project

Usage

Add to your build->plugins section (default phase is generate-sources phase)

xml
<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <!-- RELEASE_VERSION -->
    <version>7.19.0</version>
    <!-- /RELEASE_VERSION -->
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
                <generatorName>java</generatorName>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

Followed by:

mvn clean compile

General Configuration parameters

:bulb: These general configurations should be in the same level

OptionPropertyDescription
verboseopenapi.generator.maven.plugin.verboseverbose mode (false by default)
inputSpecopenapi.generator.maven.plugin.inputSpecOpenAPI Spec file path
inputSpecRootDirectoryopenapi.generator.maven.plugin.inputSpecRootDirectoryLocal root folder with spec file(s)
mergedFileNameopenapi.generator.maven.plugin.mergedFileNameName of the file that will contain all merged specs
languageopenapi.generator.maven.plugin.languagetarget generation language (deprecated, replaced by generatorName as values here don't represent only 'language' any longer)
generatorNameopenapi.generator.maven.plugin.generatorNametarget generator name
cleanupOutputopenapi.generator.maven.plugin.cleanupOutputDefines whether the output directory should be cleaned up before generating the output (false by default).
outputopenapi.generator.maven.plugin.outputtarget output path (default is ${project.build.directory}/generated-sources/openapi. Can also be set globally through the openapi.generator.maven.plugin.output property)
gitHostopenapi.generator.maven.plugin.gitHostThe git host, e.g. gitlab.com
gitUserIdopenapi.generator.maven.plugin.gitUserIdsets git information of the project
gitRepoIdopenapi.generator.maven.plugin.gitRepoIdsets the repo ID (e.g. openapi-generator)
collapsedSpecopenapi.generator.maven.plugin.collapsedSpecsets the path to the collapsed single-file representation of the OpenAPI spec
includeCollapsedSpecInArtifactsopenapi.generator.maven.plugin.publishCollapsedSpecincludes the collapsed spec in the Maven artifacts (false by default)
templateDirectoryopenapi.generator.maven.plugin.templateDirectorydirectory with mustache templates
templateResourcePathopenapi.generator.maven.plugin.templateResourcePathdirectory with mustache templates via resource path. This option will overwrite any option defined in templateDirectory.
engineopenapi.generator.maven.plugin.engineThe name of templating engine to use, "mustache" (default) or "handlebars" (beta)
authopenapi.generator.maven.plugin.authadds authorization headers when fetching the OpenAPI definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values
configurationFileopenapi.generator.maven.plugin.configurationFilePath to separate json configuration file. File content should be in a json format {"optionKey":"optionValue", "optionKey1":"optionValue1"...} Supported options can be different for each generator. Run config-help -g {generator name} command for generator-specific config options
skipOverwriteopenapi.generator.maven.plugin.skipOverwriteSpecifies if the existing files should be overwritten during the generation. (false by default)
apiPackageopenapi.generator.maven.plugin.apiPackagethe package to use for generated api objects/classes
modelPackageopenapi.generator.maven.plugin.modelPackagethe package to use for generated model objects/classes
invokerPackageopenapi.generator.maven.plugin.invokerPackagethe package to use for the generated invoker objects
packageNameopenapi.generator.maven.plugin.packageNamethe default package name to use for the generated objects
groupIdopenapi.generator.maven.plugin.groupIdsets project information in generated pom.xml/build.gradle or other build script. Language-specific conversions occur in non-jvm generators
artifactIdopenapi.generator.maven.plugin.artifactIdsets project information in generated pom.xml/build.gradle or other build script. Language-specific conversions occur in non-jvm generators
artifactVersionopenapi.generator.maven.plugin.artifactVersionsets project information in generated pom.xml/build.gradle or other build script. Language-specific conversions occur in non-jvm generators
libraryopenapi.generator.maven.plugin.librarylibrary template (sub-template)
modelNamePrefixopenapi.generator.maven.plugin.modelNamePrefixSets the prefix for model classes and enums
modelNameSuffixopenapi.generator.maven.plugin.modelNameSuffixSets the suffix for model classes and enums
apiNameSuffixopenapi.generator.maven.plugin.apiNameSuffixSets the suffix for api classes
ignoreFileOverrideopenapi.generator.maven.plugin.ignoreFileOverridespecifies the full path to a .openapi-generator-ignore used for pattern based overrides of generated outputs
httpUserAgentopenapi.generator.maven.plugin.httpUserAgentSets custom User-Agent header value
removeOperationIdPrefixopenapi.generator.maven.plugin.removeOperationIdPrefixremove operationId prefix (e.g. user_getName => getName)
skipOperationExampleopenapi.generator.maven.plugin.skipOperationExampleskip examples defined in the operation
logToStderropenapi.generator.maven.plugin.logToStderrwrite all log messages (not just errors) to STDERR
enablePostProcessFileopenapi.generator.maven.plugin.enable file post-processing hook
skipValidateSpecopenapi.generator.maven.plugin.skipValidateSpecWhether or not to skip validating the input spec prior to generation. By default, invalid specifications will result in an error.
strictSpecopenapi.generator.maven.plugin.strictSpecWhether or not to treat an input document strictly against the spec. 'MUST' and 'SHALL' wording in OpenAPI spec is strictly adhered to. e.g. when false, no fixes will be applied to documents which pass validation but don't follow the spec.
openapiNormalizeropenapi.generator.maven.plugin.openapiNormalizerspecifies the rules to be enabled in OpenAPI normalizer in the form of RULE_1=true,RULE_2=original.
generateAliasAsModelopenapi.generator.maven.plugin.generateAliasAsModelgenerate alias (array, map) as model
configOptionsN/Aa map of generator-specific parameters. To show a full list of generator-specified parameters (options), please use configHelp (explained below)
instantiationTypesopenapi.generator.maven.plugin.instantiationTypessets instantiation type mappings in the format of type=instantiatedType,type=instantiatedType. For example (in Java): array=ArrayList,map=HashMap. In other words array types will get instantiated as ArrayList in generated code. You can also have multiple occurrences of this option
importMappingsopenapi.generator.maven.plugin.importMappingsspecifies mappings between a given class and the import that should be used for that class in the format of type=import,type=import. You can also have multiple occurrences of this option
typeMappingsopenapi.generator.maven.plugin.typeMappingssets mappings between OpenAPI spec types and generated code types in the format of OpenAPIType=generatedType,OpenAPIType=generatedType. For example: array=List,map=Map,string=String. You can also have multiple occurrences of this option. To map a specified format, use type+format, e.g. string+password=EncryptedString will map type: string, format: password to EncryptedString.
schemaMappingsopenapi.generator.maven.plugin.schemaMappingsspecifies mappings between the schema and the new name in the format of schema_a=Cat,schema_b=Bird. https://openapi-generator.tech/docs/customization/#schema-mapping
nameMappingsopenapi.generator.maven.plugin.nameMappingsspecifies mappings between the property name and the new name in the format of property_a=firstProperty,property_b=secondProperty. https://openapi-generator.tech/docs/customization/#name-mapping
modelNameMappingsopenapi.generator.maven.plugin.modelNameMappingsspecifies mappings between the model name and the new name in the format of model_a=FirstModel,model_b=SecondModel. https://openapi-generator.tech/docs/customization/#name-mapping
parameterNameMappingsopenapi.generator.maven.plugin.parameterNameMappingsspecifies mappings between the parameter name and the new name in the format of param_a=first_parameter,param_b=second_parameter. https://openapi-generator.tech/docs/customization/#name-mapping
inlineSchemaNameMappingsopenapi.generator.maven.plugin.inlineSchemaNameMappingsspecifies mappings between the inline schema name and the new name in the format of inline_object_2=Cat,inline_object_5=Bird.
inlineSchemaOptionsopenapi.generator.maven.plugin.inlineSchemaOptionsspecifies the options used when naming inline schema in inline model resolver
languageSpecificPrimitivesopenapi.generator.maven.plugin.languageSpecificPrimitivesspecifies additional language specific primitive types in the format of type1,type2,type3,type3. For example: String,boolean,Boolean,Double. You can also have multiple occurrences of this option
additionalPropertiesopenapi.generator.maven.plugin.additionalPropertiessets additional properties that can be referenced by the mustache templates in the format of name=value,name=value. You can also have multiple occurrences of this option
serverVariableOverridesopenapi.generator.maven.plugin.serverVariableOverridesA map of server variable overrides for specs that support server URL templating
reservedWordsMappingsopenapi.generator.maven.plugin.reservedWordsMappingsspecifies how a reserved name should be escaped to. Otherwise, the default _<name> is used. For example id=identifier. You can also have multiple occurrences of this option
generateApisopenapi.generator.maven.plugin.generateApisgenerate the apis (true by default). Specific apis may be defined as a CSV via apisToGenerate.
apisToGenerateopenapi.generator.maven.plugin.apisToGenerateA comma separated list of apis to generate. All apis is the default.
generateModelsopenapi.generator.maven.plugin.generateModelsgenerate the models (true by default). Specific models may be defined as a CSV via modelsToGenerate.
modelsToGenerateopenapi.generator.maven.plugin.modelsToGenerateA comma separated list of models to generate. All models is the default.
generateSupportingFilesopenapi.generator.maven.plugin.generateSupportingFilesgenerate the supporting files (true by default)
supportingFilesToGenerateopenapi.generator.maven.plugin.supportingFilesToGenerateA comma separated list of supporting files to generate. All files is the default.
generateModelTestsopenapi.generator.maven.plugin.generateModelTestsgenerate the model tests (true by default. Only available if generateModels is true)
generateModelDocumentationopenapi.generator.maven.plugin.generateModelDocumentationgenerate the model documentation (true by default. Only available if generateModels is true)
generateApiTestsopenapi.generator.maven.plugin.generateApiTestsgenerate the api tests (true by default. Only available if generateApis is true)
generateApiDocumentationopenapi.generator.maven.plugin.generateApiDocumentationgenerate the api documentation (true by default. Only available if generateApis is true)
skipcodegen.skipskip code generation (false by default. Can also be set globally through the codegen.skip property)
skipIfSpecIsUnchangedcodegen.skipIfSpecIsUnchangedSkip the execution if the source file is older than the output folder (false by default. Can also be set globally through the codegen.skipIfSpecIsUnchanged property)
addCompileSourceRootopenapi.generator.maven.plugin.addCompileSourceRootAdd the output directory to the project as a source root, so that the generated java types are compiled and included in the project artifact (true by default). Mutually exclusive with addTestCompileSourceRoot.
addTestCompileSourceRootopenapi.generator.maven.plugin.addTestCompileSourceRootAdd the output directory to the project as a test source root, so that the generated java types are compiled only for the test classpath of the project (false by default). Mutually exclusive with addCompileSourceRoot.
dryRunopenapi.generator.maven.plugin.dryRunDefines whether the generator should run in dry-run mode. In dry-run mode no files are written and a summary about file states is output ( false by default).
environmentVariablesN/Adeprecated. Use globalProperties instead.
globalPropertiesN/AA map of items conceptually similar to "environment variables" or "system properties". These are available to all aspects of the generation flow. See Global Properties for list of available properties.
configHelpcodegen.configHelpdumps the configuration help for the specified library (generates no sources)

Configuring map structures

For configuration options documented as a map above, the key/value options may be configured as free-form nodes under these options. This takes the format:

xml
<configuration>
    <option>
       <key>value</key>
    </option>
</configuration>

This configuration node location will match that of the plugin configuration examples at the top of this document and in the section below. Here, option matches in option name in the first column in the table from the previous section. The key and value text are any values you'd like to provide for that option. As an example, to configure globalProperties to match the --global-property models=User:Pet example from our Selective Generation documentation, see below.

xml
<configuration>
    <globalProperties>
       <models>User:Pet</models>
    </globalProperties>
</configuration>

Notice that some of these environment variable options may overwrite or conflict with other options available to the maven plugin. For example, the above globalProperties example is equivalent to the following:

xml
<configuration>
    <generateModels>true</generateModels>
    <modelsToGenerate>User:Pet</modelsToGenerate>
</configuration>

The difference here is that you may define generateModels and modelsToGenerate as properties, while globalProperties may only be configured as a configuration node.

Type and import mappings

To override the mappings between OpenAPI spec types and the types used in the generated code, set typeMappings.

xml
<configuration>
    <typeMappings>
        <!-- convert Double to BigDecimal -->
        <typeMapping>Double=java.math.BigDecimal</typeMapping>
    </typeMappings>
</configuration>

For types that are not already included in the generator configuration, you may need to add a corresponding importMapping too.

xml
<configuration>
    <!-- convert file/binary to JAX-RS StreamingOutput -->
    <typeMappings>
        <typeMapping>binary=StreamingOutput</typeMapping>
        <typeMapping>file=StreamingOutput</typeMapping>
    </typeMappings>
    <importMappings>
        <importMapping>StreamingOutput=javax.ws.rs.core.StreamingOutput</importMapping>
    </importMappings>
</configuration>

Custom Generator

Specifying a custom generator is a bit different. It doesn't support the classpath:/ syntax, but it does support the fully qualified name of the package. You can also specify your custom templates, which also get pulled in. Notice the dependency on a project, in the plugin scope. That would be your generator/template jar.

xml
<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>${openapi-generator-maven-plugin-version}</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/yaml/yamlfilename.yaml</inputSpec>
                <!-- language file, like e.g. JavaJaxRSCodegen -->
                <generatorName>com.my.package.for.GeneratorLanguage</generatorName>
                <templateDirectory>myTemplateDir</templateDirectory>

                <output>${project.build.directory}/generated-sources</output>
                <apiPackage>${default.package}.handler</apiPackage>
                <modelPackage>${default.package}.model</modelPackage>
                <invokerPackage>${default.package}.handler</invokerPackage>
            </configuration>
        </execution>
    </executions>

    <dependencies>
        <dependency>
            <groupId>com.my.generator</groupId>
            <artifactId>customgenerator</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>

Sample configuration

Please see an example configuration for using the plugin. To run these examples, explicitly pass the file to maven. Example:

bash
mvn -f non-java.xml compile