我有一个使用 Spymemcached 库的 Heroku Java 应用程序,在我的例子中,我使用了 hibernate-memcached 库(1.3)。
我现在需要确保对我的应用程序的所有请求都通过 HTTPS。这让我看到了这篇文章,其中解决方案的重点是利用 webapp-runner 插件和一些配置来为我的应用程序获取正确的标头(您为运行器提供 context.xml)。
我的问题是 webapp-runner 插件对 Spymemcached 库也有依赖关系(在依赖关系图的下方),这会导致启动时发生冲突。此外,我不能按照本文的建议将 webapp-runner 降级到 7.0.22.1 ,因为对指定 context.xml 的支持是在事后才出现的。
所以我认为将 Spymemcached 从我的 hibernate-memcached 依赖项中排除是一件简单的事情,这样就只包含 webapp-runner 的 Spymemcached 源:
<dependency>
<groupId>com.googlecode</groupId>
<artifactId>hibernate-memcached</artifactId>
<version>1.3</version>
<exclusions>
<exclusion>
<artifactId>hibernate</artifactId>
<groupId>org.hibernate</groupId>
</exclusion>
<exclusion>
<groupId>spy</groupId>
<artifactId>spymemcached</artifactId>
</exclusion>
</exclusions>
</dependency>
但由于某种原因,我仍然在启动时遇到冲突 - 在创建我的 memcachedClient 的工厂 bean 上,我在我的应用程序上下文中指定:
<bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">...</bean>
导致臭名昭著的 java.lang.NoClassDefFoundError:
Error loading class [net.spy.memcached.spring.MemcachedClientFactoryBean] for bean with name 'memcachedClient' defined in file [/home/markus/coding/reader/target/tomcat.8080/work/Tomcat/localhost/_/WEB-INF/classes/META-INF/spring/applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/springframework/beans/factory/FactoryBean
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:153)...
当我在 IDE 中搜索 MemcachedClientFactoryBean 时,我可以看到它是由 webapp-runner 而不是 hibernate-memcached 提供的,因此排除似乎做了正确的事情。
我在这里遗漏了一些明显的东西吗?如何摆脱这个 NoClassDefFoundError?