为了账号安全,请及时绑定邮箱和手机立即绑定

使用 IntelliJ 引用 jar 库导致 ClassNotFoundException

使用 IntelliJ 引用 jar 库导致 ClassNotFoundException

RISEBY 2023-05-17 16:37:25
我正在为我的世界编译一个插件,它基本上在登录时播放一首歌曲。我的代码使用这个外部 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


查看完整回答
反对 回复 2023-05-17
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

在您的情况下,您必须在服务器上安装 McJukebox 插件,运行您自己的自定义插件。我想否则,您的插件将无法工作。一般来说,导出包含插件所需类的源/jar 文件就足够了。您还可以通过函数加载 jar。



查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信