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 文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/80522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速定位到源码位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计

基于AH1101芯片的5V升18.6V LED恒流背光供电方案设计 在现代电子设备中&#xff0c;LED背光技术因其高效、节能、寿命长等优点被广泛应用于各类显示设备。本文将详细介绍如何利用AH1101高效升压恒流驱动芯片&#xff0c;实现从5V输入电压升压至18.6V&#xff0c;为LED背光板提供…

16.1 - VDMA视频转发实验之TPG

文章目录 1 实验任务2 系统框图3 硬件设计3.1 IP核配置3.2 注意事项 4 软件设计4.1 注意事项4.2 工程源码4.2.1 main.c文件 1 实验任务 基于14.1&#xff0c;使用Xilinx TPG&#xff08;Test Pattern Generator&#xff09; IP提供视频源&#xff0c;将视频数据通过VDMA写入PS…

认识Docker/安装Docker

一、认识Docker Docker的定义 Docker 是一个开源的应用容器引擎&#xff0c;允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器化技术使得应用可以在任何支持 Docker 的环境中运行&#xff0c;确保环境一致性。 Docker的核心组件 Docker Engine&#xff1a;负责…

实用工具:微软软件PowerToys(完全免费),实现多台电脑共享鼠标和键盘(支持window系统)

实用工具&#xff1a;微软软件 PowerToys 让多台电脑共享鼠标和键盘 在如今的数字化办公与生活场景中&#xff0c;我们常常会面临同时使用多台电脑的情况。例如&#xff0c;办公时可能一台电脑用于处理工作文档&#xff0c;另一台用于运行专业软件或查看资料&#xff1b;家庭环…

西门子 Teamcenter13 Eclipse RCP 开发 1.1 工具栏 普通按钮

西门子 Teamcenter13 Eclipse RCP 开发 1.1 工具栏 普通按钮 1 配置文件2 插件控制3 命令框架 位置locationURI备注菜单栏menu:org.eclipse.ui.main.menu添加到传统菜单工具栏toolbar:org.eclipse.ui.main.toolbar添加到工具栏 style 值含义显示效果push普通按钮&#xff08;默…

React中巧妙使用异步组件Suspense优化页面性能。

文章目录 前言一、为什么需要异步组件&#xff1f;1. 性能瓶颈分析2. 异步组件的价值 二、核心实现方式1. React.lazy Suspense&#xff08;官方推荐&#xff09;2. 路由级代码分割&#xff08;React Router v6&#xff09; 总结 前言 在 React 应用中&#xff0c;随着功能复…

现在环保方面有什么新的技术动态

环保领域的技术发展迅速&#xff0c;尤其在“双碳”目标、数字化转型和可持续发展背景下&#xff0c;涌现出许多创新技术和应用。以下是当前环保领域的新技术动态&#xff08;截至2024年&#xff09;&#xff1a; 一、碳中和与碳减排技术 CCUS&#xff08;碳捕集、利用与封存&a…

solidwors插件 开发————仙盟创梦IDE

SolidWorks VBS SolidWorks 支持通过 VBScript&#xff08;.vbs&#xff09;脚本 进行简单的二次开发&#xff08;如自动化建模、批量操作等&#xff09;&#xff0c;但严格来说这属于 脚本编程&#xff0c;而非传统的插件&#xff08;Plug-in&#xff09;开发&#xff08;插件…

docker(二)初识 docker

在第一章的容器化架构中&#xff0c;我们已经了解到了 docker 是一个容器化技术&#xff0c;本章将详细介绍什么是虚拟化、容器化技术&#xff0c;以及什么是 docker。 一、物理机 VS 虚拟化 VS 容器化 物理机&#xff1a; 实际的服务器或者计算机。是相对于虚拟机而言的对实体…

ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!

对于非英语母语的作者来说,写SCI论文的时候经常会碰到语法错误、表达不够专业、结构不清晰以及术语使用不准确等问题。传统的润色方式要么成本高、效率低,修改过程又耗时又费力。虽然AI工具可以帮助我们来润色论文,但单独用ChatGPT或DeepSeek都会存在内容泛泛、专业性不足的…

python打包exe报错:处理文件时错误:Excel xlsx file; not supported

背景&#xff1a;最近用python写一个excel解析工具&#xff0c;然后打包成exe可执行文件的时候&#xff0c;遇到这样的问题 1.在我自己编译器运行是可以正常将上传后的excel进行解析&#xff0c;但是在打包成exe后&#xff0c;就无法正常解析excel 问题排查&#xff1a; 1.切换…

Ubuntu操作合集

UFWUncomplicated Firewall 查看状态和规则&#xff1a; 1查看状态sudo ufw status&#xff0c; 2查看详细信息sudo ufw status verbose&#xff0c; 默认策略配置&#xff1a; 1拒绝所有入站sudo ufw default deny incoming 2允许所有出战sudo ufw default allow outgoing …

怎么用Origin画出MATLAB效果的3D时频图

MATLAB画3D时频图的效果比Origin差远了....但用Origin去画MATLAB需要一些过程 本帖让你轻轻松松把MATLAB的时频图搬移到Origin中&#xff0c;然后拥有高级视图的3D时频图&#xff0c;并且可以随心调整格式 一、数据搬移 首先&#xff0c;在MATLAB中打开时频图变量 复制 在O…

OpenEvidence AI临床决策支持工具平台研究报告

平台概述 OpenEvidence是一个专为医疗专业人士设计的临床决策支持工具,旨在通过整合各类临床计算器和先进的人工智能技术,提高医生的诊疗决策效率和准确性。作为一款综合性医疗平台,OpenEvidence将复杂的医学计算流程简化,同时提供个性化的临床建议,使医生能够更快、更准…

vim - v

在 Vim 中&#xff0c;使用 可视模式&#xff08;Visual Mode&#xff09; 可以选中文本并进行复制、剪切、粘贴等操作。以下是详细的使用方法&#xff1a; 1. 进入可视模式 命令功能v字符可视模式&#xff08;按字符选择&#xff09;V&#xff08;大写&#xff09;行可视模式…

GUI图形化演示

目录 概述 常用组件如下&#xff1a; JFrame: 一.新建JFrame对象&#xff1a; 二.设置JFrame的大小&#xff1a; 三.设定JFrame的关闭方式 布局方式&#xff1a; setLayout 方法概述 常用布局管理器 自定义布局 注意事项 面板与布局的嵌套&#xff1a; 监听器&#…

Visual Studio已更新为17.14+集成deepseek实现高效编程

01 Visual Studio 2022 v17.14。 此更新侧重于全面提供出色的开发人员体验&#xff0c;侧重于稳定性和安全性以及 AI 改进。 02 GPT-4o代码完成模式 我们非常高兴地宣布&#xff0c;新的 GPT-4o Copilot 代码完成模型现已在 Visual Studio 17.14 中为 GitHub Copilot 用户…

URP相机如何将场景渲染定帧模糊绘制

1&#xff09;URP相机如何将场景渲染定帧模糊绘制 2&#xff09;为什么Virtual Machine会随着游戏时间变大 3&#xff09;出海项目&#xff0c;打包时需要勾选ARMv7吗 4&#xff09;Unity是手动还是自动调用GC.Collect 这是第431篇UWA技术知识分享的推送&#xff0c;精选了UWA社…

OpenAI推出Codex — ChatGPT内置的软件工程Agents

OpenAI继续让ChatGPT对开发者更加实用。 几天前,他们增加了连接GitHub仓库的支持,可以"Deep Research"并根据你自己的代码提问。 今天,该公司在ChatGPT中推出了Codex的研究预览版,这是迄今为止最强大的AI编码Agent。 它可以编写代码、修复错误、运行测试,并在…