Google Cloud Spring: java.lang.NoClassDefFoundError: Не удалось инициализировать класс org.web3j.crypto.Sign - PullRequest
0 голосов
/ 28 мая 2019

Я работаю над загрузочным приложением Spring, которое использует Web3j для связи с клиентами Ethereum.Результат Dockerized и отлично работает на моем локальном компьютере и частном сервере.Но запустить его на 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 .

И вотфайл докера:

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"]
...