After doing some more digging, I have confirmed the following: - The midonet plugin is using the Maven Shade plugin to put a bunch of dependencies into itself. - The plugin hosted in this repository was last updated in 2013. - Most importantly: removing all the guava stuff out of the midonet plugin fixes this issue.
I have not had any success in applying https://github.com/openwide-java/tomcat-classloader-ordered to get Tomcat to load its jars in alphabetical order, for whatever reason. I tried putting the Loader in various context definition locations, but it refuses to work. Any ideas? Jeff On Thu, Mar 9, 2017 at 1:43 PM, Jeff Hair <j...@greenqloud.com> wrote: > Hi, > > I'm deploying 4.9.2.0 (not the vanilla version, but rather an upgraded > version of our fork) on Tomcat 8. Management server startup fails with the > following error: > > java.lang.IncompatibleClassChangeError: Found interface > com.google.common.base.Equivalence, but class was expected > > I've traced this down to the OutOfBandServiceManagerImpl. More > specifically, when it tries to build the hostAlertCache using Guava's > CacheBuilder. Deep in Guava, it's calling an "identity()" method on the > Equivalence class. All of the Guava classes are coming from guava-19.0 > except for com/google/common/base/Equivalence.class. The Equivalence > class is being loaded from the midonet jar for some reason, and that > version does not have the method needed. Thus, the error. > > This is because Tomcat apparently does not load jars in alphabetical order > anymore, starting with version 8. An open ticket for them to fix this is > here: https://bz.apache.org/bugzilla/show_bug.cgi?id=57129 > > It could be possible to "fix" this by using a custom ClassLoader to force > Tomcat to load things alphabetically (testing that right now--and not > really succeeding), but the proper fix is to have the midonet client not be > packaging guava with itself. Does anyone know why this is? > > Jeff >