Spymemcached与hibernate-memcached和webapp-runner冲突

时间:2013-06-13 14:43:00

标签: java maven heroku spymemcached

我有一个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?

1 个答案:

答案 0 :(得分:1)

仅供参考我发现webapp-runner版本7.0.22确实支持通过运行java -jar target/webapp-runner.jar --help

为其提供context.xml

与指定... --context_xml ...而非... --context-xml ...

的更高版本略有不同

webapp-runner版本7.0.22没有将Spymemcached作为依赖项,这解决了问题。