Google Cloud Spring:java.lang.NoClassDefFoundError:无法初始化类org.web3j.crypto.Sign

时间:2019-05-28 07:30:30

标签: java docker google-cloud-platform ethereum web3-java

我正在开发一个使用Web3j与以太坊客户端通信的Spring引导应用程序。结果是Dockerized,可以在我的本地PC和私有服务器上正常工作。 但是在Google Cloud Platform上运行它失败,并出现以下错误。

java.lang.NoClassDefFoundError: Could not initialize class org.web3j.crypto.Sign

这是失败的代码:

Credentials credentials = Credentials.create(pk);

我的Gradle依赖项包括:

compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.60'
compile group: 'org.web3j', name: 'core', version: '4.3.0'

我可以看到Gradle下载了两个与Web3j相关的库,并且都存在于运行的Docker容器中(在GCP和本地)。

core-4.3.0.jar
crypto-4.3.0.jar

我查看了jar文件内部,看到两个jar文件都包含相同的程序包名称org.web3j.crypto。我怀疑这是否是问题的根源。但是我不明白为什么相同的docker文件可以毫无问题地在本地运行,但是在GCP中却失败了!

这是我构建docker文件的方式:

gradle wrapper --gradle-version 4.8
./gradlew clean build
tar -zxf build/libs/*.jar -C build/libs/
docker build -t $IMAGE_NAME .

这是docker文件:

FROM openjdk:8-jre-alpine

RUN mkdir -p /app/config
ADD "application.yml" /app/config/spring-config.yml

COPY build/libs/BOOT-INF/lib /app/lib
COPY build/libs/META-INF /app/META-INF
COPY build/libs/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com/*/*/*/Application", "--spring.config.location=/app/config/spring-config.yml"]

0 个答案:

没有答案