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

Maven部署后生成的jar包如何运行?打包规则与依赖相关疑问

Maven常见疑问解答

你观察到打包产物仅包含src/main/java编译后的class文件是Maven默认打包插件的标准行为,以下是对应问题的解答:

1. 运行Maven部署操作时,是否会将代码打包为jar格式并上传至远程仓库?

是的,mvn deploy命令会按Maven生命周期顺序执行编译、测试、打包、验证等前置阶段,默认会按照pom中指定的打包类型(缺省为jar)生成当前模块的构件,连同模块的pom文件一起,上传至pom中<distributionManagement>节点配置的对应远程仓库。如果是多模块项目,每个子模块都会生成独立构件分别上传。

2. 打包生成的jar包是如何运行的?

Maven默认生成的普通jar包无法直接运行,因为它既没有指定入口主类信息,也没有包含依赖内容,要运行jar有两种常用方案:

  • 手动指定类路径运行:使用java -cp命令将当前jar包和所有依赖的jar包都加入JVM类路径,同时指定入口主类的全限定名,命令示例:java -cp yourProject.jar:dependency1.jar:dependency2.jar com.yourpackage.YourMainClass
  • 打包为可执行jar:通过配置Maven打包插件(常用的有maven-assembly-plugin、maven-shade-plugin、spring-boot-maven-plugin),在打包阶段将入口主类路径写入jar包的MANIFEST.MF文件,同时把所有依赖包整合进输出的jar中,最终生成的可执行jar可以直接用java -jar yourProject.jar命令运行。

3. 该jar包运行时不需要pom文件中声明的所有依赖jar包吗?

必须需要依赖才能正常运行。你看到默认打包的jar中没有依赖内容,是因为Maven默认的maven-jar-plugin仅负责打包当前模块的编译产物,不会把pom声明的依赖一并打入jar中。
你在编码、测试阶段可以正常调用依赖的类,是因为Maven会自动在构建阶段维护类路径,把所有依赖都加入类路径中,你不需要手动处理。但单独运行jar时,必须保证所有依赖都在JVM的类路径下可被加载,否则会抛出ClassNotFoundException、NoClassDefFoundError之类的类加载错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:15:03