使用Maven编译Spigot插件出现主类ClassNotFoundException问题咨询
问题原因及解决方案
Caused by: java.lang.ClassNotFoundException: plugin.Main
上述错误明确说明Spigot服务端无法从你编译的jar包中找到指定的主类,结合你提供的项目结构,根因及修复方法如下:
- 不符合Maven默认源码目录规则
Maven默认仅将src/main/java识别为Java源码目录,你当前将主类所在包放在src/main/plugin-package下,Maven编译阶段不会处理该路径下的Java文件,导致最终打包的jar包中没有你编写的任何类文件,自然找不到主类。
修复方法二选一:- (推荐)按照Maven标准目录结构调整,将你的业务代码包整体移动到
src/main/java目录下 - 保持现有目录结构,在
pom.xml的build节点中添加源码目录配置:
<build> <sourceDirectory>src/main/plugin-package</sourceDirectory> <!-- 其余原有配置保留 --> </build> - (推荐)按照Maven标准目录结构调整,将你的业务代码包整体移动到
- 主类配置不匹配
调整源码目录后,还要确认src/main/resources/plugin.yml中的main字段取值,和你的主类的完整包名+类名完全一致。例如你的主类文件第一行是package com.xxx.betterteaming;,类名为Main,那么plugin.yml中对应配置应为main: com.xxx.betterteaming.Main - 补充:要实现排除spigot-api依赖缩小体积的需求,只需在
pom.xml中spigot-api依赖的配置添加<scope>provided</scope>即可,示例如下:
<dependencies> <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> <version>1.12.2-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> <!-- 其余依赖配置保留 --> </dependencies>
所有配置调整完成后,执行mvn clean package重新打包,将新生成的jar包放入服务器plugins目录即可正常加载。
内容的提问来源于stack exchange,提问作者Kristjan Taniel
相关产品推荐
相关产品推荐

