2016-07-25 69 views
0

爲什麼錯誤發生,我該如何解決?java.lang.LinkageError:嘗試重複的類定義

[02:13:02] [pool-4-thread-2/WARN]: Exception in thread "pool-4-thread-2" 
[02:13:02] [pool-4-thread-2/WARN]: java.lang.LinkageError: loader (instance of org/bukkit/plugin/java/PluginClassLoader): attempted duplicate class definition for name: "com/mongodb/client/model/Filters" 
[02:13:02] [pool-4-thread-2/WARN]: at java.lang.ClassLoader.defineClass1(Native Method) 
[02:13:02] [pool-4-thread-2/WARN]: at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
[02:13:02] [pool-4-thread-2/WARN]: at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
[02:13:02] [pool-4-thread-2/WARN]: at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
[02:13:02] [pool-4-thread-2/WARN]: at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
[02:13:02] [pool-4-thread-2/WARN]: at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
[02:13:02] [pool-4-thread-2/WARN]: at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
[02:13:02] [pool-4-thread-2/WARN]: at java.security.AccessController.doPrivileged(Native Method) 
[02:13:02] [pool-4-thread-2/WARN]: at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
[02:13:02] [pool-4-thread-2/WARN]: at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:101) 
[02:13:02] [pool-4-thread-2/WARN]: at org.bukkit.plugin.java.JavaPluginLoader.getClassByName(JavaPluginLoader.java:195) 
[02:13:02] [pool-4-thread-2/WARN]: at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:97) 
[02:13:02] [pool-4-thread-2/WARN]: at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:86) 
[02:13:02] [pool-4-thread-2/WARN]: at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[02:13:02] [pool-4-thread-2/WARN]: at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[02:13:02] [pool-4-thread-2/WARN]: at me.franzsan.data.mongo.MongoCharacter.existsCharacter(MongoCharacter.java:109) 
[02:13:02] [pool-4-thread-2/WARN]: at me.franzsan.data.mongo.MongoCharacter.lambda$loadCharacter$0(MongoCharacter.java:44) 
[02:13:02] [pool-4-thread-2/WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[02:13:02] [pool-4-thread-2/WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[02:13:02] [pool-4-thread-2/WARN]: at java.lang.Thread.run(Thread.java:745) 

這是導致該錯誤

FindIterable cursor = connection.getCharacters().find(Filters.eq("uuid", uuid)); 

然後也有此行。它來自另一個模塊,兩者應該同時異步執行(或者相互之後不久,因爲我認爲現在我只有一個線程)。這個工作沒有錯誤。

FindIterable cursor = connection.getPlayers().find(Filters.eq("uuid", id)); 

Filters.eq是一種靜態方法。

兩者都使用相同的

ExecutorService pool = Executors.newCachedThreadPool(); 

我覺得我缺乏關鍵知識,我,但我不知道在哪裏看FO RIT。

+0

你使用了一些不尋常的類加載設置? – immibis

+0

我使用MongoCharacter類的接口和MongoPlayer類(工作代碼中的類)非常相似。 MongoCharacter類是問題還是加載Mongo驅動程序有問題? getPlayers()和getCharacters()都是從相同的MongoDatabase類派生的MongoCollection。 –

+0

@ImranAli這不是'LinkageError'的子類。它*是一個'LinkageError'。 – EJP

回答

0

duplicate class definition for name說的都是。看起來你像在其他插件中一樣在類路徑com.mongodb.client中將mongodb驅動程序複製到了您的插件中,並且您在同一臺服務器上運行了兩個插件。這會導致衝突,因爲您嘗試使用完全相同的類路徑加載2個類。

+0

我認爲這是一個ClassLoader錯誤。我修正了這個錯誤,只把數據庫訪問權限放在一個模塊中。但後來遇到了與我自己的類相同的問題,當另一個依賴於模塊的模塊首先加載該模塊的類(異步)時。我現在啓動時手動加載該枚舉 –

相關問題