跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Maven 项目中如何将本地依赖库打包进最终 JAR

处理 Maven 本地依赖时,直接使用 system 作用域会导致路径硬编码且依赖无法自动打包进 JAR。正确做法是通过 mvn install:install-file 命令将本地 JAR 安装至本地仓库,并在 pom.xml 中移除 scope 和 systemPath 配置。若需生成包含所有依赖的单文件 JAR,建议配合 maven-shade 插件进行打包,从而确保项目的可移植性和部署一致性。

苹果系统发布于 2026/3/26更新于 2026/10/1796 浏览
Maven 项目中如何将本地依赖库打包进最终 JAR

为什么需要处理本地依赖

在现代后端开发中,构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库,也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。

常见问题:使用 system 作用域

在 Maven 中,可以使用 system 作用域来引用本地 JAR 包。然而,这种方法有几个显著的缺点:

  • 不可移植性:system 作用域依赖的路径是硬编码的,其他开发人员在不同的环境中可能无法找到该路径。
  • 打包问题:使用 system 作用域的依赖默认不会包含在最终打包的 JAR 文件中,导致运行时缺少必要的依赖。

为了避免上述问题,推荐的做法是将本地依赖库安装到 Maven 本地仓库中,并使用常规的依赖管理机制进行引用。这样,可以确保依赖库的一致性和可移植性,同时也方便后续的依赖管理和版本控制。

具体操作步骤

以下是详细的步骤,展示如何在 Maven 项目中包含本地依赖库并将其打包到最终的 JAR 文件中。我们以 Doris 连接器(flink-doris-connector)作为示例,但这同样适用于其他本地依赖库。

1. 将本地 JAR 安装到 Maven 本地仓库

首先,需要将本地的 JAR 包安装到 Maven 的本地仓库中。假设有一个本地的 flink-doris-connector JAR 文件位于项目的 libs 目录下。打开终端,执行以下命令:

mvn install:install-file \
  -DgroupId=org.apache.doris \
  -DartifactId=flink-connector-doris_2.12 \
  -Dversion=1.14_2.12-1.1.1 \
  -Dpackaging=jar \
  -Dfile=libs/flink-doris-connector-1.14_2.12-1.1.1.jar

参数说明:

  • -DgroupId:依赖的组织 ID,通常与包名相对应。
  • -DartifactId:依赖的模块名。
  • -Dversion:依赖的版本号。
  • -Dpackaging:依赖的打包类型,通常为 jar。
  • -Dfile:本地 JAR 文件的路径。

通过上述命令,将本地的 JAR 包安装到 Maven 本地仓库中,使其能够像其他依赖一样被 Maven 管理。

2. 修改 pom.xml 中的依赖配置

安装完成后,需要在项目的 pom.xml 文件中引用该依赖。移除之前使用 system 作用域的配置,并改为默认的 compile 作用域。

原始依赖配置(使用 system 作用域):

<dependency>
  <groupId>org.apache.doris</groupId>
  <artifactId>flink-connector-doris_${scala.binary.version}</artifactId>
  <version>1.14_2.12-1.1.1</version>
  system
  ${project.basedir}/libs/flink-doris-connector-1.14_2.12-1.1.1.jar

<scope>
</scope>
<systemPath>
</systemPath>
</dependency>

修改后的依赖配置(推荐):

<dependency>
  <groupId>org.apache.doris</groupId>
  <artifactId>flink-connector-doris_2.12</artifactId>
  <version>1.14_2.12-1.1.1</version>
</dependency>

注意:省略了 <scope> 和 <systemPath> 元素,默认作用域为 compile,这样 Maven 会自动处理该依赖。

3. 重新构建项目

为了确保所有依赖(包括本地依赖)都被打包到最终的 JAR 文件中,我们需要使用 Maven Shade 插件。标准的 mvn package 命令通常会将依赖放在 lib 目录下,而不是打入 JAR 内部。

添加 Shade 插件配置到 pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

最后,清理之前的构建产物并编译项目源代码:

mvn clean package

此命令将生成一个包含所有必要依赖的可执行 JAR 文件,解决了本地依赖无法打包的问题。

目录

  1. 为什么需要处理本地依赖
  2. 常见问题:使用 system 作用域
  3. 具体操作步骤
  4. 1. 将本地 JAR 安装到 Maven 本地仓库
  5. 2. 修改 pom.xml 中的依赖配置
  6. 3. 重新构建项目

更多推荐文章

查看全部
  • Windows 11 安装与卸载 Copilot 应用的多种方法
  • Vivado 安装教程:从官网下载至完成配置
  • AI 辅助前端入门实战:从零构建第一个网页
  • LeetCode 141 环形链表判断:哈希表与快慢指针解法
  • DeepSeek 隐藏玩法与高阶提示词应用指南
  • 修复 Anaconda 开始菜单快捷方式丢失及 mkmenus 报错
  • C++ 基础进阶:内存管理、类型转换与 IO 流使用
  • Linux 进程创建与终止:fork 原理与退出机制实战
  • 前端与 Spring Boot 后端无感 Token 刷新实践
  • Redis Sentinel 高可用集群的 Java 客户端实践
  • 2026最强AI图像生成器测评!10款工具真实对比谁最强
  • 基于深度学习的无人机洪水灾害图像分割与水量估算
  • Pywinauto Windows 桌面应用 Python 自动化实战
  • DeepSeek 隐藏玩法与提示词技巧指南
  • Whisper 模型本地化部署:全版本下载与离线环境搭建
  • Parlant 开源 LLM 智能体行为建模引擎介绍
  • Clawdbot 集成飞书机器人配置指南
  • Android 大厂面经:核心知识点与 ListView 图片加载解析
  • ngrok 详解:免费 HTTPS、内网穿透与本地开发调试工具
  • LLaMA-Factory 微调 Qwen3-VL 多模态模型全流程实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online