LoginSignup
0
0

【Kotlin】OpenAPI Generatorでjavax.annotation.Generatedを生成しない or jakarta.annotation.Generatedに置換【Java】

Posted at

この記事は同僚の発見した知見を代理でまとめたものです。

文脈

OpenAPI Generatorで生成されるファイルに含まれるjavax.annotation.GeneratedアノテーションのせいでJava 17移行時にコンパイルエラーが発生しました。
この問題は最新バージョンでは恐らく解決されていますが、自分たちのチームでは独自パッチを当てたバージョンを運用している関係で、バージョンアップでの解決はできませんでした。

そこで、なんとかバージョンを変えないままで、javax.annotation.Generatedを生成しない、またはjakarta.annotation.Generatedに置換することを試みました。

自分たちのチームではspring-kotlinのジェネレータを使っていますが、やり方的に言語を問わず応用可能と思われます。
また、後述するテンプレートのファイル名が同じだったので、Javaに対してはそのまま適用可能だと思っています(確認はしていません)。

やり方

OpenAPI Generatorは、mustacheのテンプレートを置換する形で生成を行います。
このテンプレートは、-tオプションを使って上書きできます。

つまり、javax.annotation.Generatedアノテーションを生成しているmustacheテンプレートを上書きすれば、javax.annotation.Generatedを生成しない、またはjakarta.annotation.Generatedに置換することができます。

実際に上書きする

javax.annotation.Generatedの生成に関わっているのはgeneratedAnnotation.mustacheという名前のファイルです。

同名のファイルを任意のディレクトリに配置し、-t ${配置先ディレクトリ}と指定することで、上書きできます。
例えばtemplatesという名前のディレクトリに配置した場合、以下のように指定することになります。

templatesという名前のディレクトリに配置した場合の生成コマンド例
java -jar ${openapi-generator-cliのjarへのパス} generate ${その他オプション} -t templates

以下、上書きに使うテンプレートの例を紹介します。

jakarta.annotation.Generatedに置換する例

以下は生成結果をjakarta.annotation.Generatedに変更する例です。
前述したファイルからアノテーション名を変えただけです。

templates/generatedAnnotation.mustache
@jakarta.annotation.Generated(value = ["{{generatorClass}}"]{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})

生成させない例

以下はGeneratedアノテーションを生成させない例です。
実際には空文字列で生成できますが、挙動を誤解させないようコメントを入れておくと親切かなと思います。

templates/generatedAnnotation.mustache
{{! javaxのGeneratedアノテーション生成を抑制するためのテンプレート、空文字列であることに意味があるため消さないこと }}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0