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

寻求更简洁的Maven依赖打包方案,解决jBCrypt类缺失错误

解决Spigot插件jBCrypt运行时NoClassDefFoundError的简洁方案

问题本质

编译阶段Maven能找到jBCrypt依赖,但默认不会把第三方依赖打包进插件Jar,而Spigot运行环境本身不带jBCrypt类,导致运行时找不到类抛出错误。

简洁解决方案

方案1:极简Maven Shade配置

你觉得Shade配置繁琐,但针对单个依赖的配置其实非常精简,在pom.xml的<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>org.mindrot.jbcrypt:**</include>
                    </includes>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

执行mvn package后,生成的Jar会自动包含jBCrypt的所有类,直接运行即可。

方案2:直接嵌入jBCrypt类(最简洁但不推荐)

从jBCrypt的官方Jar里提取org/mindrot/jbcrypt/BCrypt.class,复制到你项目的src/main/java/org/mindrot/jbcrypt目录下。这种方法不需要任何Maven配置,编译时类会直接打包进插件Jar。

⚠️ 提示:这种方式会丢失Maven依赖的版本管理能力,后续jBCrypt有安全更新时,你得手动替换类文件,不适合长期维护的项目。

方案3:利用插件Lib目录加载依赖

  1. 在pom.xml中添加依赖复制插件,把jBCrypt Jar复制到插件的lib目录:
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.6.0</version>
        <executions>
            <execution>
                <id>copy-jbcrypt</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <includeGroupIds>org.mindrot</includeGroupIds>
                    <includeArtifactIds>jbcrypt</includeArtifactIds>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
  1. 在plugin.yml里添加类路径配置:
classpath:
- lib/jbcrypt-0.4.jar

打包后把插件Jar和lib目录一起放到Spigot的插件文件夹,Spigot会自动加载lib中的依赖。

总结

优先选方案1,几行配置就能搞定依赖打包,后续维护也省心。方案2虽然简单,但长期来看维护成本高。

内容的提问来源于stack exchange,提问作者Mikachu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:05:08