java - 使用 IntelliJ 引用 jar lib 会导致 ClassNotFoundException

标签 java intellij-idea jar manifest minecraft

我正在为我的世界编译一个插件,它基本上在登录时播放一首歌曲。 源码可参见here .

一个插件已经存在,并为媒体播放器提供了我遵循的教程 MC_Jukebox ,源代码为here

我的代码使用这个外部 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 code
lib/* #external Jars (MC_Jukebox)
plugin.yml #required by Minecraft Server
META-INF/MANIFEST.MF #details below

源代码com/*是基本的Java,与现有插件/代码相比是正确的。 Lib 包含我的库 jar。 plugin.yml 是正确的,并且无需引用 lib 类即可工作。 MANIFEST.MF

Manifest-Version: 1.0
Main-Class: EntryPoint
Class-Path: lib/

问题
即使在运行服务器和客户端的 MANIFEST 类路径中引用 lib 也会导致

[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

如何引用文件夹 lib 下的 jar 中包含的 jar?

我正在使用 Intellij 进行编码和编译。 我读过这个post并尝试使用“提取文件夹”。
两者都会导致 ClassNotFoundException。

最佳答案

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

关于java - 使用 IntelliJ 引用 jar lib 会导致 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57358018/

相关文章:

java - 在运行时将多个 Java 类与 ASM 组合

java - 如何检测两个 Sprite 是否同时被触摸?

java - 我如何在intellij idea插件开发中获取maven本地存储库

maven-2 - IntelliJ2-IDEA 获取 Maven-2 下载源码和文档

java - 在 WIndows 7 中安装 Vertica JDBC jar 文件

java - 在(Eclipse 的)Jar 文件中设置类路径

java - 我们可以更新已部署服务器中的 jar/war 文件,然后重新加载新的 jar/war 文件吗?

java - 带有 Retrofit2 订单问题的 SOAP

java - 没有可用的 'ru.spb.repository.UserRepository' 类型的合格 bean : expected at least 1 bean which qualifies as autowire candidate

java - 在 Java 中使用 JDBC 创建数据库时 Main 方法无法正常工作