2009-11-25 36 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