【发布时间】:2017-12-08 15:20:22
【问题描述】:
使用 JPMML 库(使用 guava)时出现奇怪的运行时错误。
我在 pom.xml 中使用了 jpmml 相关的依赖项,如下所示
<dependency>
<groupId>org.jpmml</groupId>
<artifactId>pmml-evaluator</artifactId>
<version>1.3.6</version>
</exclusions>
</dependency>
它开始抛出异常。然后我尝试如下。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.jpmml</groupId>
<artifactId>pmml-evaluator</artifactId>
<version>1.3.6</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
我尝试使用 11.x/12.x/15.x/18.x/19.x/20.x 版本的 guava 但我仍然面临同样的异常。我浏览了谷歌,人们使用了 guava-19.0 版本,它对他们有用,但我无法做到这一点。谁能告诉我我错过了什么。
请在下面找到完整的堆栈跟踪。
java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.from(Lcom/google/common/cache/CacheBuilderSpec;)Lcom/google/common/cache/CacheBuilder;
at org.jpmml.evaluator.CacheUtil.newCacheBuilder(CacheUtil.java:97)
at org.jpmml.evaluator.CacheUtil.buildLoadingCache(CacheUtil.java:90)
at org.jpmml.evaluator.ModelEvaluator.<clinit>(ModelEvaluator.java:660)
at org.jpmml.evaluator.ModelEvaluatorFactory.newModelEvaluator(ModelEvaluatorFactory.java:80)
at org.jpmml.evaluator.ModelEvaluatorFactory.newModelEvaluator(ModelEvaluatorFactory.java:66)
.....
.....
【问题讨论】:
-
你确定你没有在你的 POM 的其他地方引入一个非常旧的版本(12.0 之前)的 Guava?可能是某种传递依赖?
-
我确认我没有使用任何其他版本的番石榴库。
-
你试过
mvn dependency:tree -Dverbose | grep guava之类的吗? -
得到这样的输出。 $ mvn 依赖:树 -Dverbose | grep guava [INFO] +- com.google.guava:guava:jar:19.0:compile [INFO] | +- (com.google.guava:guava:jar:11.0.2:provided - 因与 19.0 冲突而省略) [INFO] | | \- (com.google.guava:guava:jar:16.0.1:provided - 因与 19.0 冲突而省略) [INFO] | | \- (com.google.guava:guava:jar:16.0.1:provided - 因与 19.0 冲突而省略) [INFO] | | \- (com.google.guava:guava:jar:16.0.1:provided - 因与 19.0 冲突而省略) [INFO] | | +- (com.google.guava:guava:jar:11.0.2:provided - 因与 19.0 冲突而省略)
-
看起来不错。您正在使用 11.0.2 版本,但它似乎被正确省略了,所以它应该可以工作。弄清楚是什么包将其拉入并尝试在那里添加
excusion...