Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add packageName configuration to maven #2429

Merged
merged 1 commit into from
Apr 1, 2019
Merged

Conversation

Zomzog
Copy link
Contributor

@Zomzog Zomzog commented Mar 16, 2019

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh, ./bin/openapi3/{LANG}-petstore.sh, ./bin/security/{LANG}-petstore.sh and ./bin/openapi3/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.

Description of the PR

Add packageName configuration to maven for Kotlin client generation.

Must fix #2428

@jimschubert @dr4ke616

@jimschubert
Copy link
Member

Thanks for the PR. I've skimmed it and it looks good. I'll need to look into unrelated CI failures before merge.

@wing328
Copy link
Member

wing328 commented Mar 17, 2019

@jimschubert I've left a comment in #2428 (comment).

If that works, I think we can skip this PR.

@jimschubert
Copy link
Member

@wing328 Having read that linked issue, I still agree with the approach in this PR. I think we'll also want to add packageName as a global option, as I don't think the concern applies only to Kotlin.

Looking at the top-level generators options:

openapi-generator-cli generate
                [(-a <authorization> | --auth <authorization>)]
                [--additional-properties <additional properties>...]
                [--api-package <api package>] [--artifact-id <artifact id>]
                [--artifact-version <artifact version>]
                [(-c <configuration file> | --config <configuration file>)]
                [-D <system properties>...]
                [(-g <generator name> | --generator-name <generator name>)]
                [--git-repo-id <git repo id>] [--git-user-id <git user id>]
                [--group-id <group id>] [--http-user-agent <http user agent>]
                (-i <spec file> | --input-spec <spec file>)
                [--ignore-file-override <ignore file override location>]
                [--import-mappings <import mappings>...]
                [--instantiation-types <instantiation types>...]
                [--invoker-package <invoker package>]
                [--language-specific-primitives <language specific primitives>...]
                [--library <library>] [--log-to-stderr]
                [--model-name-prefix <model name prefix>]
                [--model-name-suffix <model name suffix>]
                [--model-package <model package>]
                [(-o <output directory> | --output <output directory>)]
                [--release-note <release note>] [--remove-operation-id-prefix]
                [--reserved-words-mappings <reserved word mappings>...]
                [(-s | --skip-overwrite)] [--skip-validate-spec]
                [(-t <template directory> | --template-dir <template directory>)]
                [--type-mappings <type mappings>...]

We have invoker, model, and api packages which can be passed as global configurations. From a user's perspective it would be weird to pass a base package name in a different manner.

I don't believe all generators handle those package options in the same way, so I feel like options for consistency would be to either move model/api/invoker package configuration out of globals or to add packageName to globals. Like the globals that exist today, users can still apply the settings via additionalProperties.

If we do go with this approach, we'll want to also add to the Gradle plugin.

@jimschubert jimschubert self-assigned this Mar 26, 2019
@Zomzog
Copy link
Contributor Author

Zomzog commented Mar 29, 2019

So what is your preferred choice?

@jimschubert
Copy link
Member

I raised the question with the core team, and was waiting for a response.

For reference, I tested this locally with two maven files:

go-gin-addl.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.openapitools</groupId>
    <artifactId>go-gin-addl-project</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>sample-project</name>
    <url>http://maven.apache.org</url>
    <build>
        <plugins>
            <!-- activate the plugin -->
            <plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>4.0.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <!-- specify the swagger yaml -->
                            <inputSpec>${project.basedir}/swagger.yaml</inputSpec>
                            <generatorName>go-gin-server</generatorName>
                            <output>${project.build.directory}/generated-sources/addl</output>

                            <additionalProperties>
                                <additionalProperty>packageName=jimschubert</additionalProperty>
                            </additionalProperties>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • build with mvn -f go-gin-addl.xml compile
  • inspect target/generated-sources/addl/go/api_pet.go
  • packageName is set as expected

go-gin-global.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.openapitools</groupId>
    <artifactId>go-gin-global-project</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>sample-project</name>
    <url>http://maven.apache.org</url>
    <build>
        <plugins>
            <!-- activate the plugin -->
            <plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>4.0.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <!-- specify the swagger yaml -->
                            <inputSpec>${project.basedir}/swagger.yaml</inputSpec>
                            <generatorName>go-gin-server</generatorName>
                            <output>${project.build.directory}/generated-sources/global</output>
                            <packageName>jimschubert</packageName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • build with mvn -f go-gin-global.xml compile
  • inspect target/generated-sources/global/go/api_pet.go
  • packageName is set as expected

To address the concern about global options not being used by all generators, I've opened #2556 for further discussion.

I'll go ahead and merge this, then make any additional changes to the CLI and Gradle Plugin.

@jimschubert jimschubert added this to the 4.0.0 milestone Apr 1, 2019
@jimschubert jimschubert merged commit 9c7d407 into OpenAPITools:master Apr 1, 2019
jimschubert added a commit that referenced this pull request Apr 2, 2019
* master: (133 commits)
  #2503: fix out-of-memory issue with nested objects with arrays with maxItems set by limiting to max. 5 example items (#2536)
  remove emitDefaultValue option (#2559)
  fix EmitDefaultValue default vallue with false (#2558)
  Added API Key auth to rust-server (#2459)
  remove initialCaps and replace with camelize (#2546)
  Add packageName configuration to maven (#2429)
  [Typescript AngularJS] fix Extra package prefix in api parameters operations (#2522)
  #1023 - [Scala] Use status family during response processing (#1024)
  Generate setters for readonly properties in server code (#1582)
  [JS] fix NPE for null string and improve Travis config file (#2553)
  [elm] Update ISO 8601 library (fixes missing time zone designator) (#2545)
  [csharp] update sample after #2528 (#2550)
  [JavaScript] fix index.js, ApiClient.js and test files generated to incorrect location (#2511)
  Aspnetcore nullable support (#2529)
  Csharp nullable support (#2528)
  [C++] [Qt5] Add enum support for client and server (#2339)
  Fixed typo in migration-from-swagger-codegen.md (#2548)
  [TypeScript Client] fix install Aurelia + fix use deprecated function (#2514)
  [KOTLIN] fix var name not correctly sanitized (#2537)
  Update swagger-parser to '2.0.11-OpenAPITools.org-1' (#2262)
  ...
@q3769-patientpoint
Copy link

I just tried 7.8.0 for Java code gen (Native). The pacakgeName has no effect in or outside configOptions element. Only way to change the base package is using apiPackage/modelPackage/invokerPackage elements inside the configOptions element.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BUG] packageName ignored by maven plugin
4 participants