我正在為我的世界編譯一個插件,它基本上在登錄時播放一首歌曲。我的代碼使用這個外部 jar 來完成這項工作:package com.iqbrod.excilysplugin;import net.mcjukebox.plugin.bukkit.api.JukeboxAPI;import net.mcjukebox.plugin.bukkit.api.ResourceType;import net.mcjukebox.plugin.bukkit.api.models.Media;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerJoinEvent;public class LoginListener implements Listener {? ? @EventHandler? ? public void onPlayerJoin(PlayerJoinEvent event) {? ? ? ? Media media = new Media(ResourceType.MUSIC, "https://od.lk/s/MTFfMjQ2ODM2NTRf/music1.mp3");? ? ? ? JukeboxAPI.play(event.getPlayer(), media);? ? }}此代碼是正確的,應該在PlayerJoinEvent. 我的問題來自對 jar 的編譯,其中包含:com/* #Source codelib/* #external Jars (MC_Jukebox)plugin.yml #required by Minecraft ServerMETA-INF/MANIFEST.MF #details below源代碼com/*是基本的 Java,與現有的插件/代碼相比是正確的。Lib包含我的庫 jar。plugin.yml是正確的并且在沒有對 lib 類的引用的情況下工作。MANIFEST.MF是Manifest-Version: 1.0Main-Class: EntryPointClass-Path: lib/問題即使在運行服務器和客戶端的類路徑中引用也會導致libMANIFEST[13:26:27] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to ExcilysPlugin v1.0 org.bukkit.event.EventException: null(...)Caused by: java.lang.NoClassDefFoundError: net/mcjukebox/plugin/bukkit/api/models/Media(...)Caused by: java.lang.ClassNotFoundException: net.mcjukebox.plugin.bukkit.api.models.Media如何在文件夾下引用我的 jar 中包含的 jar lib?我正在使用Intellij進行編碼和編譯。我讀了這篇文章,也嘗試使用“提取文件夾”。兩者都會導致 ClassNotFoundException。
2 回答

蝴蝶不菲
TA貢獻1810條經驗 獲得超4個贊
MANIFEST 中的 jars 引用指向本地目錄 ( .minecraft/plugins/
) 而不是源代碼目錄。
要解決這個問題:我的外部罐子在.minecraft/plugins/lib
而不是.minecraft/plugins/myplugin/lib
。
另一種解決方案是將這些罐子MANIFEST.mf
指向
類路徑:myplugin/lib

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
在您的情況下,您必須在服務器上安裝 McJukebox 插件,運行您自己的自定義插件。我想否則,您的插件將無法工作。一般來說,導出包含插件所需類的源/jar 文件就足夠了。您還可以通過函數加載 jar。
添加回答
舉報
0/150
提交
取消