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

如何通过Jenkins从源码构建含依赖的Java项目单Jar包

先给你纠偏最核心的认知

Jenkins本身只是流水线调度工具,不负责实现Java项目的编译、打包逻辑。你现在卡壳的根本原因是跳过了Java生态标准构建工具的学习,试图用原生javac命令处理多层目录项目,这完全偏离了业界的通用做法,效率极低且完全没法维护。

关于多层目录Java项目的编译

不要手动拼接javac命令遍历目录,Java生态有成熟的专用构建工具处理这类问题,目前业界主流就两个选择:

  • 绝大多数传统企业、存量项目使用Maven,约定大于配置,上手门槛低
  • 追求构建速度、多模块复杂项目会用Gradle,灵活性更高

这类工具默认就会递归扫描约定目录下(比如Maven默认的src/main/java路径)所有层级的Java文件,自动处理类之间的依赖顺序、第三方包引用,不需要你手动指定每个文件的路径。
你当前项目里的Lib文件夹存放本地依赖jar,只需要在构建工具的配置文件里声明该目录为本地依赖路径即可。以最容易上手的Maven为例,你只需要在项目根目录创建pom.xml配置文件,定义好项目的JDK版本、依赖规则,之后不管是本地环境还是Jenkins环境,只要执行一条mvn clean compile命令,就会自动完成所有源码的编译,编译生成的class文件会统一输出到target/classes目录,全程不需要你处理目录遍历的逻辑。

Jenkins侧需要做的配置非常少:

  • 在Jenkins插件管理中安装对应构建工具的集成插件,在全局工具配置里绑定好服务器上安装的JDK、Maven/Gradle路径
  • 新建构建任务,配置好代码拉取地址后,在构建步骤里直接调用Maven/Gradle的对应命令即可,不需要额外写文件遍历、编译的脚本。

关于打包含依赖的单Jar包

同样不需要你手动解压依赖jar、合并class文件、写manifest配置,构建工具的官方插件可以一键完成这类fat jar(包含所有依赖类的独立Jar包)构建:

  • 使用Maven的话,配置maven-assembly-plugin或者maven-shade-plugin,执行mvn package命令时,插件会自动把你项目的编译产物、所有依赖(包括你Lib目录下的本地jar)的class文件合并到同一个Jar中,还可以自动配置启动类信息,生成的包可以直接用java -jar命令启动
  • 使用Gradle的话,引入Shadow插件,执行gradle build即可直接生成对应单Jar包

给你一个可以直接复用的Maven打单Jar的最简配置片段,放到pom.xml的build节点下就行:

<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <manifest>
                    <!-- 替换成你自己项目的启动类全限定名 -->
                    <mainClass>com.example.YourMainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>build-fat-jar</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
业界Jenkins构建Java项目的通用实践
  • 所有编译、打包逻辑全部沉淀在项目代码仓内的构建配置文件(pom.xml/build.gradle)中,Jenkins只负责调用标准构建命令,绝对不要在Jenkins的构建步骤里写长串原生javac、jar操作命令,保证本地开发环境和CI环境构建逻辑完全一致,避免出现“本地能跑CI跑挂”的问题
  • 不要长期把依赖包直接扔在项目的Lib目录下提交到代码仓,等你把基础流程跑通后,建议搭一个私有Maven仓库(比如Nexus)统一管理所有第三方依赖、内部公共包,构建时自动从仓库拉取,避免依赖包散落在各个项目里
  • 优先使用Jenkinsfile以代码形式定义流水线,直接存在项目代码仓中做版本管理,不要在Jenkins页面上手动点选配置构建步骤,方便后续修改追溯。
学习优先级建议
  1. 先花1-2天学Maven基础:搞懂Maven生命周期、依赖管理、常用插件的用法,跑通本地编译、打单Jar的流程,这是所有后续操作的基础,比你自己啃javac命令参数效率高得多
  2. 再学Jenkins基础流水线操作:掌握代码拉取、构建命令调用、构建产物归档的配置,把本地能跑通的Maven构建流程搬到Jenkins上跑通
  3. 等Maven用熟了,如果后续碰到多模块大项目、构建速度慢的问题,再去了解Gradle也不迟
参考学习方向
  • 优先看Maven官方的入门指南,把核心概念(坐标、依赖范围、生命周期、插件绑定)搞透,避免被零散的旧博客内容误导
  • 看Jenkins官方的流水线示例,找Java+Maven的最小Demo照着敲,跑通一个完整的构建打包流程再往自己的业务项目上适配
  • 打包插件的配置直接看对应插件的官方说明,避免抄到跨版本的无效配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:16:00