0

作为我们的消费者驱动合同实施的一部分,我们在项目中使用 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)

以下是我们尝试的一些更改 -

  1. 将这些依赖项切换到较低版本

  2. 尝试添加 maven 程序集插件并创建一个包含所有依赖项的胖 jar

  3. 修改依赖的范围以提供和编译

  4. 在 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> 
4

0 回答 0