Описание проблемы
У меня есть java проект с зависимостью gradle от org.javamoney:moneta:1.3
.
Также у меня есть два кластера Kubernetes. Я развертываю свое приложение java, используя docker -контейнер.
Когда я развертываю свое приложение в первом Kubernetes кластере, все в порядке. Но при развертывании моего приложения (того же контейнера docker) в кластере second Kubernetes появляется следующая ошибка:
javax.money.MonetaryException: No MonetaryAmountsSingletonSpi loaded.
at javax.money.Monetary.lambda$getDefaultAmountFactory$13(Monetary.java:291)
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at javax.money.Monetary.getDefaultAmountFactory(Monetary.java:291)
Оно появляется в следующем коде:
MonetaryAmount amount = javax.money.Monetary.getDefaultAmountFactory()
.setCurrency("USD")
.setNumber(1L)
.create();
Версии программного обеспечения
- Moneta :
1.3
. - Gradle:
6.0.1
. - База docker -изображение:
openjdk:11.0.7-jdk-slim
. - Пружинная загрузка:
2.2.7.RELEASE
. - Kubernetes (та же версия на обоих кластерах):
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
. - Java:
java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment 18.9 (build 11.0.7+10)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10, mixed mode)
.
То, что я пытался
Объявлять gradle-зависимость по-другому
Я нашел этот вопрос , и это дало мне идею попробуйте объявить gradle-зависимость другим способом. Я пробовал:
implementation 'org.javamoney:moneta:1.3'
compile group: 'org.javamoney', name: 'moneta', version: '1.3', ext: 'pom'
compile 'org.javamoney:moneta:1.3'
runtimeOnly 'org.javamoney:moneta:1.3'
К сожалению, это не дало никаких положительных результатов.
Конфигурации загрузчика службы копирования и вставки для Moneta
Как упоминалось в в этом комментарии Я пытался скопировать службу Настройка загрузчика из Moneta в следующую директорию проекта: src/main/resources/META-INF/services
.
К сожалению, это не помогло.
Инициализация пользовательской валюты без пружины
Я пытался сделать это только в основном классе, но это не решило проблему.
Вопросы
- Что является причиной root этой проблемы ?
- Как правильно решить эту проблему?