本地运行没问题的应用,打包后放到tomcat运行出现以下错误:
大致意思就是com.google.common.collect.FluentIterable.toList()
方法不存在,而FluentIterable
这个类可在phoenix-client-4.14.1-HBASE-1.3.jar
和guava-20.0.jar
中找到。
判断是依赖冲突问题。用mvn dependency:tree > tree.log
命令查看依赖树。
发现是springfox-swagger2
用到了guava:20.0
依赖。
于是试着去掉swagger中对guava的依赖:
再查看依赖树发现guava版本成了12.1且在phoenix-client下。
对比guava20.0和12.1版本,20.0版本有FluentIterable.toList()
方法而12.1版本没有。
于是思路大概理清:
swagger依赖guava20.0版本,phoenix-client有guava 12.1版本。tomcat加载时选择了guava 12.1版本(选择原则需追究),因而导致swagger调用时报没有FluentIterable.toList()
方法错误。
尝试:
排除swagger中对guava的依赖,单独引入guava20.0包,能正常运行。至于原因,仍需探求。