2015-10-14 221 views
0

我運行一個Java測試程序來建立OrientDB連接並保持當我從IntelliJ IDEA的或的Openfire(XMPP服務器)中運行的代碼獲得這些例外情況:

java.lang.NoSuchMethodError: com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.maximumWeightedCapacity(J)Lcom/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder; at com.orientechnologies.orient.core.db.record.ridbag.sbtree.OSBTreeCollectionManagerAbstract.(OSBTreeCollectionManagerAbstract.java:43) at com.orientechnologies.orient.core.db.record.ridbag.sbtree.OSBTreeCollectionManagerAbstract.(OSBTreeCollectionManagerAbstract.java:48) at com.orientechnologies.orient.client.remote.OSBTreeCollectionManagerRemote.(OSBTreeCollectionManagerRemote.java:58) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at java.lang.Class.newInstance(Class.java:379) at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx$2.call(ODatabaseDocumentTx.java:2863) at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx$2.call(ODatabaseDocumentTx.java:2854) at com.orientechnologies.common.concur.resource.OSharedContainerImpl.getResource(OSharedContainerImpl.java:64) at com.orientechnologies.orient.core.storage.OStorageAbstract.getResource(OStorageAbstract.java:143) at com.orientechnologies.orient.client.remote.OStorageRemoteThread.getResource(OStorageRemoteThread.java:658) at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.initAtFirstOpen(ODatabaseDocumentTx.java:2853) at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.open(ODatabaseDocumentTx.java:260) at com.orientechnologies.orient.jdbc.OrientJdbcConnection.(OrientJdbcConnection.java:63) at com.orientechnologies.orient.jdbc.OrientJdbcDriver.connect(OrientJdbcDriver.java:52) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:187) at com.momentum.orientdb.core.JdbcConnectionManager.getConnection(JdbcConnectionManager.java:87) at com.momentum.orientdb.core.JdbcConnectionManager.getConnection(JdbcConnectionManager.java:56) at com.momentum.orientdb.core.JdbcConnectionManager$getConnection.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) at com.momentum.orientdb.core.test.JdbcConnectionManagerTest.testGetConnection(JdbcConnectionManagerTest.groovy:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

任何想法爲什麼?我該如何解決它?

更新1

在我看來,它有與此庫(從谷歌)做:concurrentlinkedhashmap-LRU-1.4.1.jar

但是我搜索了開發計算機的文件系統,發現只有上面提到的版本(1.4.1)。

更新2 - 解決方案

徹底搜索後,我發現我自己的計算機的文件系統中有不同版本的concurrentlinkedhashmap-LRU-xxxx.jar並不知我「託管」把兩個不同的版本中的版本。

同時,在使用我的庫(我已經測試過)時,爲了從OpenFire中建立與OrientDb的連接,我仍然得到相同的異常,因爲OpenFire使用另一個版本的concurrentlinkedhashmap,然後OrientDb使用另一個版本concurrentlinkedhashmap-LRU-1.4.1.jar)。

+2

你有多個備受尊重的Jar文件的副本嗎? –

+0

請檢查此代碼來自com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap $ Builder的庫嗎? – Phani

+0

檢查此鏈接:http://stackoverflow.com/questions/13501506/dependency-trouble-using-cassandraunit-with-astyanax – soorapadman

回答

1

NoSuchMethodError是因爲在運行時,Java的試圖調用對象的方法,並發現它不存在,特別是:

com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.maximumWeightedCapacity(J)Lcom/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder; 

當然,你所期望的代碼不會如果是這樣的話就編譯,所以這幾乎總是意味着你已經構建了與運行時提供的不同版本的類 - 它通常是版本控制問題。因此,你應該弄清楚你從哪個庫中獲得了ConcurrentLinkedHashMap,並將它與運行時使用的版本進行比較(你是如何部署的?它是否直接從IntelliJ運行?)。你可能會發現他們有不同的版本,你需要改變你的版本以匹配。