Я работаю над загрузочным приложением 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"]