作为我们的消费者驱动合同实施的一部分,我们在项目中使用 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 依赖项类之一 - 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' 并且异常 = 'Could not initialize class au.com.dius.pact.model.RequestResponsePact',
错误:j ava.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] [OUT]
在 com.test.sample.cdcc.util.JsonToPactUtil.convertJSONtoPACT(JsonToPactUtil.java:47)
以下是我们尝试的一些更改 -
将这些依赖项切换到较低版本
尝试添加 maven 程序集插件并创建一个包含所有依赖项的胖 jar
修改依赖的范围以提供和编译
在 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>