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

为何Maven package生成jar包后需用java命令运行对应Java类?

为什么要用Maven打包运行,而不是直接运行源码文件

你现在拿无任何依赖的单文件Demo做测试,会觉得直接跑源码很方便,但这种方式只适合写几十行的玩具代码,一旦进入真实项目开发,直接跑源码的方式完全不可行,打包+Maven构建的价值主要在这几个方面:

  • 解决依赖管理的噩梦
    你现在看到的App是没有引入任何第三方库的最简示例,所以直接在源码路径执行命令能跑通。只要你在代码里用到第三方工具(比如JSON解析包、数据库驱动、工具类库),直接跑源码就需要手动把所有依赖的jar包路径全部拼到执行命令的classpath参数里,少一个就会报ClassNotFoundException。真实项目动辄几十上百个第三方依赖,依赖之间还有嵌套依赖关系,手动管理根本不可能完成。
    Maven会自动根据pom.xml里的配置拉取所有依赖,在编译、测试、运行阶段自动维护正确的classpath,不需要你手动处理任何依赖路径问题。
  • 标准化全流程构建,减少人为错误
    mvn package不是简单把编译好的文件塞进压缩包,它会按约定的流程自动完成整套构建动作:
    1. 清理之前的旧构建产物
    2. 编译src/main/java下的所有业务源码
    3. 自动执行src/test/java下的所有单元测试,只要有测试用例不通过就直接终止构建,避免把有问题的代码打包出去
    4. 把编译好的class文件、资源文件按Java标准规范的结构组装成jar包
      整个流程不需要人工干预,不会出现漏编译、漏跑测试、文件放错路径这类低级错误。
  • jar是Java生态通用的交付标准
    你写代码不可能永远只在自己本地开发环境运行:要把程序部署到服务器、分享给其他用户使用、或者把自己写的工具给其他项目当依赖引用,总不能把一堆零散的.java源文件拷来拷去。
    jar包是Java生态约定的通用交付格式,一个符合规范的jar包可以在任何装了对应版本JRE的设备上运行,不需要对方安装Maven、不需要对方和你有一样的目录结构,甚至不需要对方拿到你的源码。等你后续学会打包含所有依赖的fat jar(比如SpringBoot项目的可执行jar),只需要一行java -jar xxx.jar就能启动服务,部署和分发的效率极高。
  • 统一项目结构降低协作成本
    Maven约定的目录结构是全行业通用的,不管你进什么公司、参与什么开源Java项目,源码放哪、测试代码放哪、配置文件放哪的规则全是统一的,不需要每个项目都花时间熟悉自定义的目录结构,团队协作的时候沟通成本极低。

你可以做个小测试:在App.java里加一行用到Gson的代码,试试直接跑源码要花多少步骤才能跑通,再对比下在pom里加Gson依赖后直接执行mvn package的体验,就能立刻感受到差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:27:35