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

如何在另一台电脑上解决Maven项目JAR包的依赖缺失问题?

解决Maven打包JAR后依赖缺失的问题

我太懂这种打包好的程序换台电脑就崩的崩溃感了!你遇到的核心问题是:Maven默认的maven-jar-plugin只会打包你项目自身的代码,不会把声明的第三方依赖(比如你用到的Apache Commons Codec)包含进去。本地能正常运行是因为Maven已经把依赖下载到了本地仓库,运行时能自动找到这些依赖;但把单独的JAR移到另一台电脑后,那些依赖库不在目标机器上,程序自然找不到org/apache/commons/codec/digest/DigestUtils这类类了。

下面给你几个靠谱的解决方案,按需选择就行:

方案1:用maven-assembly-plugin打“胖JAR”(最简单直接)

这个插件能把你项目的代码和所有依赖打包到一个单独的JAR文件里,拿到别的电脑直接就能运行。

步骤:

  1. 在你的pom.xml里添加插件配置,放在<build><plugins>节点下:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
        <!-- 指定主类,就是你程序的入口类 -->
        <archive>
            <manifest>
                <mainClass>com.your.package.YourMainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <!-- 这个引用会把所有依赖打包进去 -->
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  1. 执行打包命令:
mvn clean package
  1. 打包完成后,在target目录下会生成两个JAR:一个是默认的仅含自身代码的JAR,另一个是带-jar-with-dependencies后缀的胖JAR,把这个胖JAR移到别的电脑,直接用java -jar your-project-jar-with-dependencies.jar就能运行了。

方案2:用maven-shade-plugin打包(更灵活,适合复杂项目)

这个插件比assembly功能更强,能处理依赖冲突、重命名类等场景,很多开源项目都用它打包。

步骤:

  1. 在pom.xml的<build><plugins>节点下添加配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.5.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- 指定主类 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.your.package.YourMainClass</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 执行打包命令:
mvn clean package
  1. 打包后target目录下的主JAR就是包含所有依赖的胖JAR,直接运行即可。

方案3:手动管理依赖(不推荐,适合特殊场景)

如果不想打胖JAR,可以把所有依赖JAR放到和你的项目JAR同一目录的lib文件夹里,然后运行时指定类路径:

  • Linux/macOS下:
java -cp your-project.jar:lib/* com.your.package.YourMainClass
  • Windows下(注意路径分隔符是分号):
java -cp your-project.jar;lib\* com.your.package.YourMainClass

这种方式需要手动拷贝所有依赖,比较麻烦,容易漏包,所以优先推荐前两种方案。

⚠️ 注意:不管用哪种方案,一定要确保配置里的mainClass是你程序的正确入口类,不然运行时会提示“找不到主类”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:22:32