NoSuchMethodError com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap $ Builder.maximumWeightedCapacity

时间:2015-10-14 13:26:36

标签: java intellij-idea orientdb

我正在运行Java测试程序以建立与OrientDB的连接,并在从IntelliJ IDEA或OpenFire(xmpp服务器)中运行代码时不断获取这些异常:

  

java.lang.NoSuchMethodError:   com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap $ Builder.maximumWeightedCapacity(J)LCOM / googlecode上/ concurrentlinkedhashmap / ConcurrentLinkedHashMap $生成器;   在   com.orientechnologies.orient.core.db.record.ridbag.sbtree.OSBTreeCollectionManagerAbstract。(OSBTreeCollectionManagerAbstract.java:43)   在   com.orientechnologies.orient.core.db.record.ridbag.sbtree.OSBTreeCollectionManagerAbstract。(OSBTreeCollectionManagerAbstract.java:48)   在   com.orientechnologies.orient.client.remote.OSBTreeCollectionManagerRemote。(OSBTreeCollectionManagerRemote.java:58)   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native   方法)at   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)   在   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)   在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)   在   com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx $ 2.call(ODatabaseDocumentTx.java:2854)   在   com.orientechnologies.common.concur.resource.OSharedContainerImpl.getResource(OSharedContainerImpl.java:64)   在   com.orientechnologies.orient.core.storage.OStorageAbstract.getResource(OStorageAbstract.java:143)   在   com.orientechnologies.orient.client.remote.OStorageRemoteThread.getResource(OStorageRemoteThread.java:658)   在   com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.initAtFirstOpen(ODatabaseDocumentTx.java:2853)   在   com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.open(ODatabaseDocumentTx.java:260)   在   com.orientechnologies.orient.jdbc.OrientJdbcConnection。(OrientJdbcConnection.java:63)   在   com.orientechnologies.orient.jdbc.OrientJdbcDriver.connect(OrientJdbcDriver.java:52)   在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)   在   com.momentum.orientdb.core.JdbcConnectionManager.getConnection(JdbcConnectionManager.java:56)   在   com.momentum.orientdb.core.JdbcConnectionManager $ getConnection.call(未知   来源)at   org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)   在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)   在   org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)   在   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)   在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   在   org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)   在org.junit.runner.JUnitCore.run(JUnitCore.java:160)at   com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)   在   com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)   在   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)   在   com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

知道为什么吗?我该如何解决?

更新1

在我看来,它与此库(来自Google)有关: 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 个答案:

答案 0 :(得分:1)

发生

findElement()是因为在运行时,Java试图在一个对象上调用一个方法,并发现它不存在,特别是:

NoSuchMethodError

当然,如果是这样的话,你会期望代码不会被编译,所以这几乎总意味着你构建了一个不同于运行时提供的类的不同版本的代码。 - 它通常是版本问题。

所以,你应该找出你从com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.maximumWeightedCapacity(J)Lcom/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder; 获得的库,并将其与运行时使用的版本进行比较(你如何部署它?它是直接从IntelliJ运行的吗?)。您可能会发现他们有不同的版本,并且您需要更改您的版本才能匹配。

答案 1 :(得分:0)

请转到以下链接并下载JAR文件

http://mvnrepository.com/artifact/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/1.4.2

问题在于您正在尝试的版本,正确的版本是1.4.2。