使用Maven开发Minecraft插件时出现ClassNotFoundException求助
解决Minecraft插件运行时NoClassDefFoundError/ClassNotFoundException问题
问题根源分析
编译正常但运行时找不到类,核心原因有两个:
- 依赖Scope配置错误:
<scope>provided</scope>表示依赖由运行环境(如Spigot服务器)提供,但你的lavidefaultlib-1.3.jar是自定义库,服务器不会自带,导致运行时无法加载类。 - 打包未包含依赖:Spigot仅加载主插件Jar,若未将自定义库的类合并或打包进主插件,运行时自然找不到对应类。
- 直接指向target目录的仓库配置不规范,容易引发依赖引用不稳定。
具体解决方案
步骤1:将自定义库安装到Maven本地仓库
打开命令行,进入lavidefaultlib-1.3.jar所在目录(D:/Minecraft/MinecraftPlugins/LaviDefault/lavidefaultlib/target/),执行以下命令:
mvn install:install-file -Dfile=lavidefaultlib-1.3.jar -DgroupId=com.lavi -DartifactId=Lavidefaultlib -Dversion=1.3 -Dpackaging=jar
注意:
groupId要和你自定义库中类的根包名一致(比如你的类com.lavi.GameMode.SPLi_GameMode,groupId就是com.lavi)
步骤2:修正主插件Pom配置
移除错误仓库配置
删除主插件Pom中指向target目录的<repository>节点,Maven会自动从本地仓库读取已安装的依赖。
修正依赖Scope
将依赖的<scope>provided</scope>改为compile(或直接删除该节点,compile是默认值),确保编译和运行时都能获取依赖:
<dependency> <groupId>com.lavi</groupId> <!-- 与install命令中的groupId保持一致 --> <artifactId>Lavidefaultlib</artifactId> <version>1.3</version> </dependency>
步骤3:配置Maven Shade插件打包依赖
需要将自定义库的类合并到主插件Jar中,在主插件Pom的<build>节点下添加Shade插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <includes> <include>com.lavi:*</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build>
步骤4:重新打包测试
执行mvn clean package,将生成的主插件Jar放入Spigot服务器的plugins目录启动即可。
验证要点
- 解压打包后的主插件Jar,确认内部包含
com/lavi/GameMode/SPLi_GameMode类文件。 - 检查代码中类的引用路径与自定义库中的类路径完全一致(Java包名、类名区分大小写)。
内容的提问来源于stack exchange,提问作者LaviRb
相关产品推荐
相关产品推荐

