Open tomokazu-suzuki opened 2 weeks ago
docker run --rm -v ${PWD}:/local openapitools/openapi-generator-cli meta -o /local/generators/game-api-server -n game-api-server -p pro.dangerclose.gameapi.server
docker run --rm -it -v ${PWD}/generators/game-api-server:/usr/src/mymaven -w /usr/src/mymaven maven:3.8.6-jdk-11 /bin/sh
# コンテナ内で `mvn package` コマンドを実行
mvn package
mvn package
実行後エラーでた
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.875 s
[INFO] Finished at: 2024-08-31T14:25:42Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile (default-testCompile) on project game-api-server-openapi-generator: Compilation failure: Compilation failure:
[ERROR] /usr/src/mymaven/src/test/java/pro/dangerclose/gameapi/server/GameApiServerGeneratorTest.java:[136,46] cannot find symbol
[ERROR] symbol: method getInputSpec()
[ERROR] location: variable configurator of type org.openapitools.codegen.config.CodegenConfigurator
[ERROR] /usr/src/mymaven/src/test/java/pro/dangerclose/gameapi/server/GameApiServerGeneratorTest.java:[140,67] cannot find symbol
[ERROR] symbol: variable StandardCharsets
[ERROR] location: class pro.dangerclose.gameapi.server.GameApiServerGeneratorTest
[ERROR] /usr/src/mymaven/src/test/java/pro/dangerclose/gameapi/server/GameApiServerGeneratorTest.java:[140,30] cannot find symbol
[ERROR] symbol: variable FileUtils
[ERROR] location: class pro.dangerclose.gameapi.server.GameApiServerGeneratorTest
[ERROR] /usr/src/mymaven/src/test/java/pro/dangerclose/gameapi/server/GameApiServerGeneratorTest.java:[146,30] variable clientOptInput is already defined in method testGeneratePingWithDifferentSourceDirectory()
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
serialization/DefaultDriverFactory.mustache
を追加するコード追加後の mvn package
実行結果
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.318 s
[INFO] Finished at: 2024-09-01T02:56:51Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile (default-testCompile) on project game-api-server-openapi-generator: Compilation failure
[ERROR] /usr/src/mymaven/src/test/java/pro/dangerclose/gameapi/server/GameApiServerGeneratorTest.java:[12,32] cannot find symbol
[ERROR] symbol: class TestUtils
[ERROR] location: package org.openapitools.codegen
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
TestUtilはcoreパッケージにはいっていないのでエラーが出ているものと思われる。openapi-generator
ではなく、openapi-generator
を使わないといけないようだ。
mvnのopenapigeneratorはcoreパッケージっぽいのですが、それは関係ありますか? https://github.com/OpenAPITools/openapi-generator/blob/v7.7.0/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java をつかいたいですが、coreパッケージは https://github.com/OpenAPITools/openapi-generator/tree/v7.7.0/modules/openapi-generator-core/src/main/java/org/openapitools/codegen をみてもないことがわかります。
openapi-generator-core
と openapi-generator
の関係について理解することは重要です。以下にそれぞれの違いと関連性について説明します。
openapi-generator-core
と openapi-generator
openapi-generator-core
:
openapi-generator
:
openapi-generator-core
を利用して実際のコード生成を行うためのツールや実装が含まれます。TestUtils
クラスの利用についてTestUtils
クラスは openapi-generator
モジュールのテスト用ユーティリティクラスであり、openapi-generator-core
には含まれていません。TestUtils
クラスやその他のテスト関連のクラスは、主にテストや開発中の支援ツールとして openapi-generator
モジュール内に存在します。openapi-generator
と openapi-generator-core
の使い分けopenapi-generator-core
を利用している場合、コア機能や基本的なコード生成ロジックを扱います。これはプログラム内でのコード生成のエンジンとしての利用を意図しています。openapi-generator
を利用する場合、CLIツールや具体的なコード生成機能を利用します。CLI ツールや具体的なジェネレーターを実行する場合はこちらを使います。TestUtils
を使用したい場合:openapi-generator
モジュールをビルドして、そのテストやユーティリティクラスにアクセスする必要があります。具体的には、openapi-generator
モジュールを含めたクラスパスでテストを実行する必要があります。
openapi-generator-core
を利用している場合:TestUtils
などのテスト用ユーティリティクラスは openapi-generator
モジュールに含まれているため、openapi-generator
モジュールのクラスパスに含める必要があります。
もし openapi-generator
モジュールのクラスパスに含まれていない場合、そのクラスパスを正しく指定することが重要です。
TestUtils を使用したい場合:openapi-generator モジュールをビルドして、そのテストやユーティリティクラスにアクセスする必要があります。具体的には、openapi-generator モジュールを含めたクラスパスでテストを実行する必要があります。 の方法を教えて下さい。
TestUtils
クラスを利用するために、openapi-generator
モジュールをビルドして、そのテストやユーティリティクラスにアクセスする方法を以下に示します。
openapi-generator
モジュールをビルドする
openapi-generator
モジュールをビルドして、その JAR ファイルを生成します。これにより、テストやユーティリティクラスが含まれる JAR ファイルが作成されます。
ビルドした JAR をクラスパスに追加する
ビルドした JAR ファイルをクラスパスに追加して、TestUtils
クラスを利用できるようにします。
openapi-generator
モジュールのビルド以下のコマンドを実行して、openapi-generator
モジュールをビルドします。これにより、必要なクラスファイルが含まれる JAR ファイルが生成されます。
cd /path/to/openapi-generator
mvn clean install -pl modules/openapi-generator -am
このコマンドは、openapi-generator
モジュールとその依存関係をビルドします。ビルドが成功すると、target
ディレクトリ内に JAR ファイルが生成されます。具体的には、modules/openapi-generator/target/openapi-generator.jar
というファイルが作成されるはずです。
次に、ビルドした JAR ファイルをクラスパスに追加して、TestUtils
クラスを利用できるようにします。これを行うためには、以下のように Java コマンドを実行します。
java -cp "path/to/your/other/dependencies/*:path/to/openapi-generator/target/openapi-generator.jar" org.your.package.YourTestClass
このコマンドでは、以下のことを行います:
-cp
オプションでクラスパスを指定します。ここで、path/to/your/other/dependencies/*
は他の依存関係を含むディレクトリ、path/to/openapi-generator/target/openapi-generator.jar
はビルドした openapi-generator
JAR ファイルのパスです。org.your.package.YourTestClass
は、テストを実行するクラスの完全修飾名です。これには TestUtils
クラスを利用するテストクラスが含まれます。もし Maven プロジェクト内で TestUtils
を利用する場合、pom.xml
にビルドした JAR を依存関係として追加することもできます。以下のように、ビルドした JAR をプロジェクトのローカルリポジトリにインストールし、pom.xml
に依存関係を追加します。
mvn install:install-file -Dfile=path/to/openapi-generator/target/openapi-generator.jar -DgroupId=org.openapitools -DartifactId=openapi-generator -Dversion=7.7.0 -Dpackaging=jar
pom.xml
に以下のように依存関係を追加します。
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>7.7.0</version>
<scope>test</scope>
</dependency>
この設定を行うことで、openapi-generator
モジュール内のクラスにアクセスできるようになります。
pom.xmlのscopeはtestにされていますよね?それ以外はopenapi-generatorのcoreパッケージをつかいたいのですが、それはどうしたらいいですか?
openapi-generator
モジュールの TestUtils
などのユーティリティクラスを使用するために scope
を test
に設定するのは、主にテストコードにおける依存関係を管理するためです。openapi-generator
の core パッケージを実際のコードで使用する場合は、以下の手順で設定できます。
openapi-generator
の core 機能を使用するためには、openapi-generator-core
パッケージを依存関係として追加する必要があります。core
モジュールは、openapi-generator
の中核的な機能を提供します。これを pom.xml
に追加することで、core 機能を利用できます。
pom.xml
に openapi-generator-core
を追加以下のように pom.xml
に openapi-generator-core
を依存関係として追加します。
<dependencies>
<!-- OpenAPI Generator Core -->
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-core</artifactId>
<version>7.7.0</version>
<scope>compile</scope>
</dependency>
<!-- Test Utilities (if needed for testing) -->
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>7.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
scope
を compile
に設定すると、アプリケーションコードで openapi-generator-core
のクラスを利用できるようになります。scope
を test
に設定すると、テストコードでのみ利用できるようになります。openapi-generator
モジュールのビルドopenapi-generator
モジュールが core
機能を含んでいる場合、そのモジュールをビルドしておくことも必要です。以下のコマンドでビルドします。
cd /path/to/openapi-generator
mvn clean install -pl modules/openapi-generator-core -am
これにより、openapi-generator-core
モジュールがローカル Maven リポジトリにインストールされ、compile
スコープで利用可能になります。
ビルドが成功し、openapi-generator-core
が正しく依存関係に追加されているか確認するために、以下のコマンドを使用してクラスパスを確認できます。
mvn dependency:tree | grep 'org.openapitools:openapi-generator-core'
openapi-generator-core
は compile
スコープで依存関係に追加することで、アプリケーションコードで利用できます。openapi-generator
モジュールのユーティリティクラス(例: TestUtils
)が必要な場合は、テストコード専用として test
スコープで追加します。これにより、openapi-generator
の core 機能やユーティリティクラスを適切に利用できるようになります。
docker run --rm -v "${PWD}:/local" game-openapi-generator-cli generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g game-api-server -o /local/out/
1 を参考に
game-api-php-symfony
を作成php-symfomy