我有两个带有运行Wildfly 13.0.0.Final的Java 1.8.0_171机器的Ubuntu 16.04.5 LTS(GNU / Linux 4.4.0-119-通用x86_64)。
我的Web应用程序的pom.xml中具有以下Maven依赖项:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.0-jre</version>
</dependency>
在第一台服务器上运行Web应用程序时,它抱怨缺少方法:
java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
at org.reflections.Reflections.expandSuperTypes(Reflections.java:380)
at org.reflections.Reflections.<init>(Reflections.java:126)
at org.reflections.Reflections.<init>(Reflections.java:168)
at org.reflections.Reflections.<init>(Reflections.java:141)
...
奇怪的是,在第二台服务器上,它以相同的配置平稳运行。
以下是WEB-INF / lib目录中所有jar的列表:
答案 0 :(得分:1)
Windfly带来了Guava,因为它具有自己的依赖性: https://docs.jboss.org/wildfly/plugins/maven/latest/dependencies.html
在最新的Windfly版本中,它是Guava 18。
Sets
类仅从版本20开始可用。
我最好的猜测是,这两个版本在您的应用程序的类路径中均可用,并且巧合的是,您的应用最终使用了哪个版本。 因此,为了使依赖关系分离,您应该定义一个JBoss模块并在那里明确定义您的依赖关系。 如何执行此操作可能超出了此答案的范围,但可以在here和here中找到。