OpenAPITools / OpenAPITools/openapi-generator

[BUG][Maven] Maven plugin ignores generateApis

Open
#4,506 6 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Issue: Bug OpenAPI Generator Maven Plugin
Dominant language
Java
Stars
26.8k
Forks
7.7k
PR merge metrics
PR metrics pending

Description

Note: This bug is encountered when using the Maven plugin, but it may be that it's a bug in the generator itself; I'm not sure whether the plugin is invoking it correctly.

Description

The Maven plugin version 4.2.1 ignores the documented generateApis and generateModels configuration parameters.

I am trying to separate the data types and the generated REST client into Maven modules, using these parameters to generate the code in the appropriate place. However, the Maven plugin appears not to inspect them at all.

This is not related to any specific spec file but is a matter of the generator invocation itself.

openapi-generator version

org.openapitools:openapi-generator-maven-plugin:4.2.1:generate

Steps to reproduce

I used the following POM plugin declaration:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/openapi/equipment.yaml</inputSpec>
                <generatorName>java</generatorName>
                <modelPackage>com.foo.equipment.api.openapi</modelPackage>
                <generateApis>false</generateApis>
                <apiPackage>foo</apiPackage>
                <configOptions>
                    <library>resttemplate</library>
                    <java8>true</java8>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

When running using mvn -X, the mojo configuration model reflects the documented parameters:

<configuration>
  <!-- snip -->
  <configOptions>
    <library>resttemplate</library>
    <java8>true</java8>
    <dateLibrary>java8</dateLibrary>
  </configOptions>
  <!-- snip -->
  <generateApiDocumentation>${openapi.generator.maven.plugin.generateApiDocumentation}</generateApiDocumentation>
  <generateApiTests>${openapi.generator.maven.plugin.generateApiTests}</generateApiTests>
  <generateApis>false</generateApis>
  <generateModelDocumentation>${openapi.generator.maven.plugin.generateModelDocumentation}</generateModelDocumentation>
  <generateModelTests>${openapi.generator.maven.plugin.generateModelTests}</generateModelTests>
  <generateModels>${openapi.generator.maven.plugin.generateModels}</generateModels>
  <generateSupportingFiles>${openapi.generator.maven.plugin.generateSupportingFiles}</generateSupportingFiles>
  <generatorName>java</generatorName>
  <!-- snip -->
</configuration>

The configurator applies the generateApis setting:

[DEBUG] Configuring mojo 'org.openapitools:openapi-generator-maven-plugin:4.2.1:generate' with basic configurator -->
[DEBUG]   (f) addCompileSourceRoot = true
[DEBUG]   (f) additionalProperties = []
[DEBUG]   (f) configOptions = {dateLibrary=java8, java8=true, library=resttemplate}
[DEBUG]   (f) engine = mustache
[DEBUG]   (f) generateApis = false
[DEBUG]   (f) generatorName = java
[DEBUG]   (f) importMappings = []
[DEBUG]   (f) inputSpec = <redacted>
[DEBUG]   (f) instantiationTypes = []
[DEBUG]   (f) languageSpecificPrimitives = []
[DEBUG]   (f) modelPackage = com.foo.equipment.api.openapi
[DEBUG]   (f) output = <redacted>
[DEBUG]   (f) project = <redacted>
[DEBUG]   (f) reservedWordsMappings = []
[DEBUG]   (f) serverVariableOverrides = []
[DEBUG]   (f) skip = false
[DEBUG]   (f) skipIfSpecIsUnchanged = false
[DEBUG]   (f) typeMappings = []
[DEBUG]   (f) verbose = false
[DEBUG] -- end configuration --

Nevertheless, the generator generates a REST client (using an incorrectly "derived" package name):

[INFO] OpenAPI Generator: java (client)
[INFO] Generator 'java' is considered stable.
[INFO] Environment variable JAVA_POST_PROCESS_FILE not defined so the Java code may not be properly formatted. To define it, try 'export JAVA_POST_PROCESS_FILE="/usr/local/bin/clang-format -i"' (Linux/Mac)
[INFO] NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).
[INFO] Invoker Package Name, originally not set, is now derived from model package name: com.foo.equipment.api

and the build fails because of missing dependencies.

The inverse does not seem to be true; i.e., the generateModels=false setting is respected.

Suggest a fix

It would be useful for the Maven plugin to log the exact config it is passing to DefaultGenerator at DEBUG; even using mvn -X does not provide output useful to debugging this problem.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the Maven plugin configuration with generateApis=false and generateModels=false, then trace how the plugin invokes DefaultGenerator. Compare the handling of both settings and inspect the generated output and DEBUG logging. Done means generateApis=false prevents REST client generation and the configuration passed to DefaultGenerator is diagnosable.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, openapi
Domain
build-system, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.