2009-11-25 39 views
0

我有一个需要Jersey和Hibernate的项目。问题是它们都在封面下使用Jar文件(asm.jar)的不兼容版本。我环顾了谷歌,看起来有可能让Hibernate使用另一个名为Javassist的工具,但是当我试图按照指示平稳时。我仍然得到这些Jar文件之间的不兼容性。让Jersey和Hibernate一起工作?

显然,从堆栈跟踪我用于Jersey的asm.jar与Hibernate不兼容。如果我切换回用于Hibernate的asm.jar,那么我的Jersey代码将失败。

有没有人得到这个工作?或者我只是被困在永久的“Jar Hell”中?

--steve

PS运行的我的Hibernate测试用例一个我的堆栈跟踪看起来是这样的:

junit.framework.AssertionFailedError:异常的构造函数:testSurvey(java.lang.NoSuchMethodError:组织(Z)V at net.sf.cglib.core.DebuggingClassWriter。(DebuggingClassWriter.java:47) at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30).net objweb.asm.ClassWriter。(Z)at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24) at net.sf.cglib.c在net.sf.cglib.core.KeyFactory上创建(AbstractClassGenerator.java:216) $ Generator.create(KeyFactory.java:145) at net.sf.cglib.core.KeyFactory.create(KeyFactory。 java:117) at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) at net.sf. cglib.proxy.Enhancer。(Enhancer.java:69) 在org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117) 在org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate (CGLIBProxyFactory.java:43) at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162) at org.hibernate.tuple.entity.AbstractEntit yTuplizer。(AbstractEntityTuplizer.java:135) 在org.hibernate.tuple.entity.PojoEntityTuplizer。(PojoEntityTuplizer.java:55) 在org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping。(EntityEntityModeToTuplizerMapping.java:56) 在有机.hibernate.tuple.entity.EntityMetamodel。(EntityMetamodel.java:295) 在org.hibernate.persister.entity.AbstractEntityPersister。(AbstractEntityPersister.java:434) 在org.hibernate.persister.entity.SingleTableEntityPersister(SingleTableEntityPersister。的java:109) 在org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55) 在org.hibernate.impl.SessionFactoryImpl(SessionFactoryImpl.java:226) 在org.hibernate.cfg.Configuration.buildSessionFactory。 (Configuration.java:1294) 在org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) 在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 在org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence。 java:126) at javax.persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at com.upod.dao.SurveyDAOTest。(SurveyDAOTest.java :39) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl。的java:39) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在junit.framework.TestSuite.createTest(TestSuite的。 java:58) at junit.framework.TestSuite.addTestMethod(TestSuite.java:280) at junit.framework.TestSuite。(TestSuite.java:140) at org.eclipse.jdt.internal.junit.runner.junit3 .JUnit3TestLoader.getTest(JUnit3TestLoader.java:102) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.loadTests(JUnit3TestLoader.java:59) at org.eclipse.jdt.internal.junit.runner .RemoteTestRunner.runTests(RemoteTestRunner.java:445) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunne r.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner。 main(RemoteTestRunner.java:196) ) at junit.framework.Assert.fail(Assert.java:47) at junit.framework.TestSuite $ 1.runTest(TestSuite.java:90) at junit.framework.TestCase在junit.framework.TestResult上运行.runBare(TestCase.java:130) $ 1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult。运行(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite .runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130 ) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org .eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

+0

可能重复的[兼容性问题的ASM 3.1和HIbernate和JAX-RS](http://stackoverflow.com/questions/969693/compatibility-issue-of-asm- 3-1和hibernate-and-jax-rs) – 2010-08-03 17:13:55

回答

0

有一个妙招在this page可能的答案与类似的问题

+0

啊,我是部分正确的。但是这绝对是“我说的更直接有用的解决方案”:) – 2009-11-25 21:17:15

+0

完美。删除cglib并用cglib-nodep替换它可以让两个版本的asm共存。这意味着Jersey和Hibernate可以一起工作,没有任何问题。谢谢... – Steve 2009-11-27 18:09:19