IntelliJ IDEA 2023.1.2中Minecraft插件主类ClassNotFoundException解决方法
Minecraft插件加载ClassNotFoundException问题排查
问题背景
我在为个人服务器开发Minecraft插件,将IntelliJ IDEA更新至2023.1.2社区版后,自动补全与错误检测功能失效,错误代码仍能完成构建。通过将项目结构中的src文件夹设置为源文件夹解决了IDE功能问题,但现在加载插件时出现ClassNotFoundException,提示找不到主类fr.byxis.main.Main。已确认PlugMan插件不是问题根源,推测问题与文件夹的源目录设置有关,尝试调整源文件夹后仍未解决。
错误日志
22:26:09] [Server thread/ERROR]: [ModernPluginLoadingStrategy] Could not load plugin 'Fireland.jar' in folder 'plugins' org.bukkit.plugin.InvalidPluginException: Cannot find main class `fr.byxis.main.Main' at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:78) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] at io.papermc.paper.plugin.provider.type.spigot.SpigotPluginProvider.createInstance(SpigotPluginProvider.java:123) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.provider.type.spigot.SpigotPluginProvider.createInstance(SpigotPluginProvider.java:35) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.entrypoint.strategy.modern.ModernPluginLoadingStrategy.loadProviders(ModernPluginLoadingStrategy.java:116) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:39) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.manager.SingularRuntimePluginProviderStorage.enter(SingularRuntimePluginProviderStorage.java:57) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.manager.RuntimePluginEntrypointHandler.enter(RuntimePluginEntrypointHandler.java:40) ~[paper-1.19.4.jar:git-Paper-522] at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.loadPlugin(PaperPluginInstanceManager.java:118) ~[paper-1.19.4.jar:git-Paper-522] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at com.rylinaux.plugman.util.PaperPluginUtil.load(PaperPluginUtil.java:407) ~[PlugManX.jar:?] at com.rylinaux.plugman.util.PaperPluginUtil.load(PaperPluginUtil.java:364) ~[PlugManX.jar:?] at com.rylinaux.plugman.util.PaperPluginUtil.reload(PaperPluginUtil.java:509) ~[PlugManX.jar:?] at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java:125) ~[PlugManX.jar:?] at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:97) ~[PlugManX.jar:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] at org.bukkit.craftbukkit.v1_19_R3.CraftServer.dispatchCommand(CraftServer.java:906) ~[paper-1.19.4.jar:git-Paper-522] at org.bukkit.craftbukkit.v1_19_R3.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64) ~[paper-1.19.4.jar:git-Paper-522] at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:264) ~[paper-1.19.4.jar:?] at net.minecraft.commands.Commands.performCommand(Commands.java:322) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:306) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2290) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$20(ServerGamePacketListenerImpl.java:2250) ~[?:?] at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1342) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1319) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1312) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?] at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1290) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1178) ~[paper-1.19.4.jar:git-Paper-522] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:320) ~[paper-1.19.4.jar:git-Paper-522] at java.lang.Thread.run(Thread.java:833) ~[?:?] Caused by: java.lang.ClassNotFoundException: fr.byxis.main.Main at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:183) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:150) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.Class.forName0(Native Method) ~[?:?] at java.lang.Class.forName(Class.java:467) ~[?:?] at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[paper-api-1.19.4-R0.1-SNAPSHOT.jar:?] ... 40 more
plugin.yml配置
name: Fireland version: 3.0 author: Byxis main: fr.byxis.main.Main api-version: 1.19 ...
排查与解决建议
- 验证类路径与文件结构:检查项目中Main类的实际路径是否为
src/fr/byxis/main/Main.java,确保包名和类名完全匹配plugin.yml中的fr.byxis.main.Main,注意Java对大小写敏感。 - 检查编译输出目录:在IntelliJ IDEA的项目结构(File > Project Structure)中,确认
Project Settings > Modules下的Paths里,编译输出的Output directory和Test output directory是否正确(通常为out/production/[模块名]或target/classes)。构建后查看输出目录中是否存在fr/byxis/main/Main.class文件。 - 确认构建工具配置:如果使用Maven或Gradle,检查构建脚本是否正确标记源目录:
- Maven pom.xml示例:
<build> <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>plugin.yml</include> </includes> </resource> </resources> </build> - Gradle build.gradle示例:
sourceSets { main { java { srcDirs = ['src/main/java'] } resources { srcDirs = ['src/main/resources'] } } }
- Maven pom.xml示例:
- 重新构建项目:执行
Build > Rebuild Project,确保所有类都被正确编译,再重新打包插件。 - 检查插件包内容:解压生成的Fireland.jar,确认内部包含
fr/byxis/main/Main.class文件,且plugin.yml位于jar根目录下。
内容的提问来源于stack exchange,提问作者Byxis
相关产品推荐
相关产品推荐

