Moneta 1.3 ExchangeRateProvider.getExchangeRate(基数,术语)returns 空

Moneta 1.3 ExchangeRateProvider.getExchangeRate(base, term) returns null

我正在使用 Moneta JavaMoney 1.3 来获取汇率:

CurrencyUnit base = Monetary.getCurrency(...);
CurrencyUnit term = Monetary.getCurrency(...);
ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider();
ExchangeRate xrate = xrates.getExchangeRate(base, term);

如果我 运行 Eclipse 中的代码它工作正常。但是在使用 Maven 构建 jar 并从命令行 运行ning jar 之后,ExchangeRateProvider.getExchangeRate(base, term) returns null.

我还尝试指定 ExchangeRateProvider:ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider("ECB"); 在 Eclipse 中一切正常,从命令行它抛出一个 MonetoryException 说 "Invalid ExchangeRateProvider (not found): ECB"

这个 提到了同样的问题:"Because if i'm using dependency on money-api without bp I get null as an result." 我尝试了接受的答案:

ConversionQuery cq = ConversionQueryBuilder.of().setBaseCurrency(Base).setTermCurrency(Term).build();
MonetaryAmount zero = FastMoney.zero(Base);
ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider("ECB");
CurrencyConversion cc = xrates.getCurrencyConversion(cq);
ExchangeRate xrate = cc.getExchangeRate(zero);

再次失败:在 Eclipse 中工作,但在命令行中 returns null。这与构建 jar 时的依赖关系有关吗?我正在使用 Maven 阴影插件并关闭最小化。

或者我也应该使用 moneta-bp 吗?会很奇怪,因为 moneta-bp 是作为 Java 7 的后向端口构建的,而我正在使用 Java 8。还有其他想法吗?

提前致谢!

编辑:

运行 来自 Eclipse 的 ExchangeRateProvider 是 org.javamoney.moneta.spi.CompoundRateProvider 的一个实例。在命令行中,它是 org.javamoney.moneta.convert.internal.IdentityRateProvider 的一个实例。查看IdentityRateProvider的代码,它returns null是有道理的。但是如何获取 CompoundRateProvider?

我尝试了 this solution 而不是使用 Maven 阴影插件,现在它似乎可以工作了。