当前位置: 首页 > news >正文

Maven 项目中将本地依赖库打包到最终的 JAR 中

文章目录

  • 前言
  • 详细步骤

前言

在现代后端开发中,构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库,也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。本文将详细介绍如何在 Maven 项目中处理本地依赖库,并确保这些依赖能够正确地打包到最终的可执行 JAR 文件中。本文不仅以 Doris 连接器(flink-doris-connector)作为示例,还涵盖了处理其他本地依赖库的通用方法。


为什么需要打包本地依赖库?

通常,依赖库可以通过 Maven 中央仓库或其他公共仓库轻松获取和管理。然而,有时我们需要使用一些未发布到公共仓库的本地 JAR 包,例如:

  • 公司内部开发的库
  • 第三方提供但未上传到 Maven 仓库的库
  • 特殊版本或定制版的库
  • 直接引用本地依赖库可能会引发一些问题,尤其是在构建和部署过程中。为了确保项目的可移植性和一致性,必须将这些本地依赖正确地打包到最终的 JAR 文件中。

常见问题:使用 system 作用域

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

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

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

  • 解决方案:将本地依赖库打包到最终 JAR


详细步骤

以下是详细的步骤,展示如何在 Maven 项目中包含本地依赖库并将其打包到最终的 JAR 文件中。

  • 步骤 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><scope>system</scope><systemPath>${project.basedir}/libs/flink-doris-connector-1.14_2.12-1.1.1.jar</systemPath>
      </dependency>
      
    • 修改后的依赖配置

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

      <dependency><groupId>org.apache.doris</groupId><artifactId>flink-connector-doris_${scala.binary.version}</artifactId><version>1.14_2.12-1.1.1</version>
      </dependency>
      
  • 步骤 3:重新构建项目

    mvn clean package
    

    此命令将:

    1. 清理之前的构建产物。
    2. 编译项目源代码。
    3. 使用 Maven Shade 插件将所有依赖(包括本地依赖)打包到最终的 JAR 文件中。

相关文章:

  • 【AI】mcp server是什么玩意儿
  • Python, FastAPI 与 RESTful API:构建高效 Web 服务的指南
  • SQLite 数据库常见问题及解决方法
  • 小结: Port Security,DHCP Snooping,IPSG,DAI,
  • 《汽车软件升级通用技术要求》 GB 44496-2024——解读
  • RN 鸿蒙混合开发实践(踩坑)
  • 每日Prompt:超现实交互场景
  • 动态网站 LNMP
  • 基于LNMP架构的个人博客系统部署
  • 详解RabbitMQ工作模式之通配符模式
  • laravel 中使用的pdf 扩展包 laravel-snappy(已解决中文乱码)
  • 从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案
  • 用 openssl 测试 tls 连接
  • C++23 views::slide (P2442R1) 深入解析
  • 奇次谐波和偶次谐波【EMC】
  • 扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
  • 数据结构与算法学习-JavaScript的Array.prototype.reduce()方法
  • 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
  • 【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
  • JAVA EE_网络原理_数据链路层
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析
  • 75万采购防火墙实为299元路由器?重庆三峡学院发布终止公告:出现违法违规行为
  • 湖北石首市委副书记、市长付勇接受审查调查
  • 智利观众也喜欢上海的《好东西》
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?