【发布时间】:2012-05-30 17:19:07
【问题描述】:
我有一个 grails(2.0.3) 应用程序,它依赖于另一个使用休眠 jar 的项目,即:
org.hibernate:hibernate-core:4.1.0.Final
和
org.hibernate:hibernate-entitymanager:4.1.0.Final
当我运行使用这些 jar 的那部分代码时,它会遇到异常:-
java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence
at org.codehaus.groovy.tools.RootLoader.findClass(RootLoader.java:156)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:128)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
这就像 grails 正在使用的休眠版本的 jar 冲突问题(我不确定)。我该如何解决这个问题。
(切换依赖项目的休眠版本会很困难。所以我可以在不选择该选项的情况下解决这个问题。)
【问题讨论】:
-
您是否尝试排除此子依赖项?
-
如果我提到 BuildConfig.groovy 中的依赖项,它会在应用程序启动时给我一个异常: context.GrailsContextLoader Error execution bootstraps: java.lang.NoClassDefFoundError: org.codehaus.groovy.grails.orm。 hibernate.support.ClosureEventTriggeringInterceptor org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoClassDefFoundError: org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:736 ) 在 grails.spring.BeanBuilder.beans(BeanBuilder.java:569)
-
如果我在 BuildConfig 中避免像这样的 jar 的传递依赖,效果与我的第一种情况相同:- runtime "org.hibernate:hibernate-entitymanager:4.1.0.Final" { 传递 = 假 }
-
那么,当您需要两个(和冲突的)hibernate 版本时,您会遇到这样的情况吗?我不确定是否存在快速修复方法。也许您可以尝试制作自己的类加载器,但我无能为力,抱歉
-
是的,这就是我遇到的情况。 :-(