我有一个Heroku Java应用程序,它使用了Spymemcached库,在我的例子中,我使用了hibernate-memcached库(1.3)。
我现在需要确保对我的应用的所有请求都通过HTTPS。这导致了我post,解决方案的关键是利用webapp-runner插件和一些配置来为我的应用程序提供正确的标题(你为运行者提供了context.xml)。
我的问题是webapp-runner插件在Spymemcached库上也有依赖关系(进一步在依赖关系图中),这会导致启动时出现冲突。此外,我不能按照此post的建议将webapp-runner降级到7.0.22.1,因为支持指定context.xml是在事实之后。
所以我认为从我的hibernate-memcached依赖项中排除Spymemcached是一件简单的事情,因此只包含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>
但由于某种原因,我仍然在启动时遇到冲突 - 在工厂bean上创建我在应用程序上下文中指定的memcachedClient:
<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?
答案 0 :(得分:1)
仅供参考我发现webapp-runner版本7.0.22确实支持通过运行java -jar target/webapp-runner.jar --help
与指定... --context_xml ...
而非... --context-xml ...
webapp-runner版本7.0.22没有将Spymemcached作为依赖项,这解决了问题。