You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PaperSpigot 1.21.1环境下PaySign插件依赖Vault后启动失败,抛出NoClassDefFoundError异常求助

PaperSpigot 1.21.1环境下PaySign插件依赖Vault后启动失败,抛出NoClassDefFoundError异常求助

Hey,我来帮你捋捋这个问题!你碰到的java.lang.NoClassDefFoundError: net/milkbowl/vault/economy/Economy本质上是你的插件在运行时找不到Vault提供的Economy类,哪怕你已经在plugin.yml里加了依赖,大概率是依赖配置出了问题,或者版本不兼容,我给你列几个排查和解决方向:

1. 检查VaultAPI的依赖范围(Maven/Gradle)

如果你用构建工具管理依赖,一定要把VaultAPI设为仅编译时依赖,不能把它打包进自己的插件jar里——因为服务器上的Vault插件已经提供了这些类,重复打包会导致类加载冲突。

  • 如果你用Maven,依赖配置应该是这样:
<dependency>
    <groupId>net.milkbowl.vault</groupId>
    <artifactId>VaultAPI</artifactId>
    <version>1.7.1</version> <!-- 和你服务器上的Vault 1.17.3版本匹配 -->
    <scope>provided</scope>
</dependency>
  • 如果你用Gradle,对应配置是:
compileOnly 'net.milkbowl.vault:VaultAPI:1.7.1'

2. 确认plugin.yml的依赖配置

要注意插件名称的大小写!Vault的插件名称是Vault(首字母大写),你的plugin.yml里的依赖要写对:

name: PaySignSSR
main: com.github.hc12.paysignssr.PaySignSSR
version: 1.0-SNAPSHOT
depend: [Vault] # 用数组形式更规范,确保服务器先加载Vault再加载你的插件

如果写成小写的vault,服务器可能识别不到依赖,导致你的插件先于Vault加载,自然找不到类。

3. 匹配VaultAPI和服务器Vault版本

你服务器上用的是Vault 1.17.3,对应的VaultAPI版本应该是1.7.x,不要用太新或太旧的API版本——版本不匹配会导致类结构不一致,触发NoClassDefFoundError。

4. 提前校验Vault是否加载

可以在你的插件onEnable方法里先检查Vault是否真的被服务器加载了,避免直接调用setupEconomy()时抛错:

@Override
public void onEnable() {
    Plugin vault = getServer().getPluginManager().getPlugin("Vault");
    if (vault == null || !vault.isEnabled()) {
        getLogger().severe("Vault插件未找到或未启用!PaySignSSR将禁用!");
        getServer().getPluginManager().disablePlugin(this);
        return;
    }
    setupEconomy();
    getLogger().info("PaySignSSR启用成功!");
}

5. 检查插件jar的打包内容

解压你的paysignssr-1.0-SNAPSHOT.jar看看,里面不应该有net/milkbowl/vault开头的文件夹。如果有,说明你把VaultAPI打包进去了,这会和服务器上的Vault插件的类冲突,导致类加载异常。

按照上面的步骤排查,应该能解决这个问题!

备注:内容来源于stack exchange,提问作者HC12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:28:09