Consumer Driven Contract 実装の一環として、プロジェクトで PACT 依存関係を使用して JSON を PACT ファイルに変換しています。
PACT dependencies added in Pom.xml file -
pact-jvm-consumer-junit_2.11 (version - 3.5.0)
pact-jvm-model (version - 3.5.0)
pact-jvm-pact-broker (version - 3.6.7)
これらの PACT 依存関係はダウンロードされ、maven clean install コマンドを使用して jar にバンドルされます。そして、CloudOps VM とローカル サーバーで jar を実行すると、正常に動作し、API に対して成功の応答が返されます。同じ jar が PCF に正常にデプロイされ、API を実行しようとすると、PACT 依存関係クラスの 1 つ - au.com.dius.pact.model.RequestResponsePact に対してNoClassDefFoundErrorが返されます。
以下は、PCF ログからの完全なエラーです -
2020、レベル: ERROR、スレッド: http-nio-8080-exec-8、loggerName: com.test.sample.common.aop.logging.LoggingAspect、
メッセージ: com.test.sample.cdcc.v1.process.CdccUploadProcessV1.cdcUploadedFiles() で例外が原因 = 'NULL' および例外 = 'クラス au.com.dius.pact.model.RequestResponsePact を初期化できませんでした',
エラー: java.lang.NoClassDefFoundError : クラス au.com.dius.pact.model.RequestResponsePact を初期化できませんでした2020-05-04T15 :28:28.332+05:30 [APP/PROC/WEB/0] [OUT]
au.com.dius.pact.consumer.dsl.PactDslResponse.toPact(PactDslResponse.java:265) 2020-05-04T15:28:28.332+05:30 [APP/PROC/WEB/0] [送信]
com.test.sample.cdcc.util.JsonToPactUtil.convertJSONtoPACT (JsonToPactUtil.java:47) で
以下は、私たちが試したいくつかの変更です -
これらの依存関係を下位バージョンに切り替える
Mavenアセンブリプラグインを追加して、すべての依存関係を持つファットジャーを作成しようとしました
依存関係のスコープを提供およびコンパイルに変更する
Maven jar プラグインにクラスパスを追加する
しかし、これらすべてがこの問題の解決に役立ったわけではありません。この問題を解決するための正しい方向を教えていただけますか?
以下は、jarを作成しようとしたいくつかの方法です
オプション1:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>${project.build.directory}/lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
オプション 2:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>