問題の説明
からのgradle依存関係を持つJavaプロジェクトがありorg.javamoney:moneta:1.3
ます。
また、2 つの Kubernetes クラスターがあります。docker-container を使用して Java アプリケーションをデプロイします。
最初のKubernetes クラスターにアプリをデプロイすると、すべて問題ありません。しかし、 2 番目のKubernetes クラスターにアプリ (同じ docker-container) をデプロイすると、次のエラーが表示されます。
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();
ソフトウェアのバージョン
- モネタ:
1.3
。 - グラドル:
6.0.1
. - ベース docker-image:
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 -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-dependency を別の方法で宣言する
私はこの質問を見つけ、別の方法でgradle-dependencyを宣言しようとする考えを与えてくれました。私が試してみました:
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
.
残念ながら、それは役に立ちませんでした。
春なしでカスタム通貨を初期化する
メインクラスだけでやろうとしましたが、問題は解決しませんでした。
質問
- この問題の根本原因は何ですか?
- この問題の適切な解決策は何ですか?