我有一个使用Spymemcached库的Heroku Java应用程序,在我的例子中,它包含在我使用的hibernate-memcached库(1.3)中。
我现在需要确保我的应用程序的所有请求都通过HTTPS。这将我带到了这个post,解决方案的重点是利用webapp-runner插件和一些配置来获得我的应用程序的正确标题(您为runner提供了一个context.xml)。
我的问题是webapp-runner插件对Spymemcached库也有一个依赖关系(在依赖关系图下面),这会导致启动时发生冲突。此外,我不能像这个post建议的那样将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)...当我在我的集成开发环境中搜索MemcachedClientFactoryBean时,我可以看到它是由webapp-runner提供的,而不是hibernate-memcached,所以排除似乎做了一些正确的事情。
我是不是漏掉了什么明显的东西?我如何摆脱这个NoClassDefFoundError?
发布于 2013-06-18 00:52:48
仅供参考,我发现webapp-runner版本7.0.22确实支持通过运行java -jar target/webapp-runner.jar --help来提供context.xml
它与以后的版本略有不同,在这些版本中,您指定的是... --context_xml ...而不是... --context-xml ...
7.0.22版本的webapp-runner没有将Spymemcached作为依赖项,这解决了这个问题。
https://stackoverflow.com/questions/17089981
复制相似问题