Spring Boot 加载本地 JAR 包的技术实践

随着微服务架构的兴起,Spring Boot 因其快速构建、易于部署的特性,成为了众多开发者的首选框架。在开发过程中,我们有时需要引入一些不在公共 Maven 仓库中的 JAR 包作为依赖,这时候就需要加载本地的 JAR 包。本文将详细介绍在 Spring Boot 项目中如何加载本地 JAR 包,并给出一个具体的案例。

一、为什么需要加载本地 JAR 包?

在实际开发中,我们可能会遇到以下需要加载本地 JAR 包的情况:

  1. 赖的 JAR 包没有发布到公共 Maven 仓库。
  2. 依赖的 JAR 包是私有库,不方便公开。
  3. 需要使用某个特定版本的 JAR 包,而该版本并未在 Maven 仓库中提供。

二、加载本地 JAR 包的方法

  1. 将本地 JAR 包复制到项目的 libs 目录下(如果没有 libs 目录,可以手动创建)。
  2. 在 IntelliJ IDEA 中,右键点击 libs 目录,选择 Add -> Existing Item…,然后选择刚刚复制的 JAR 包。
  3. 右键点击刚刚添加的 JAR 包,选择 Add as Library…,在弹出的窗口中设置库的名称,并选择将其添加到项目的模块依赖中。
  4. 使用 Maven 添加系统依赖 如果项目使用 Maven 管理依赖,可以在 pom.xml 文件中添加系统范围的依赖,指向本地的 JAR 包。
<dependencies>  <!-- 其他依赖 -->  <dependency>  <groupId>自定义groupId</groupId>  <artifactId>自定义artifactId</artifactId>  <version>自定义版本号</version>  <scope>system</scope>  <systemPath>${project.basedir}/libs/自定义jar文件名.jar</systemPath>  </dependency>  
</dependencies>

请确保替换 自定义groupId、自定义artifactId、自定义版本号 和 自定义jar文件名.jar 为你的实际值。${project.basedir} 是 Maven 的一个属性,代表项目的根目录。

三、案例演示

假设我们有一个名为 jdp-core-1.1.2.RELEASE.jar 的本地 JAR 包,需要添加到 Spring Boot 项目中。

步骤一:复制 JAR 包到项目目录

将 jdp-core-1.1.2.RELEASE.jar 复制到项目的 libs 目录下。

步骤二:在 IntelliJ IDEA 中添加 JAR 包为库

  1. 在 IntelliJ IDEA 中,右键点击 libs 目录,选择 Add -> Existing Item…,然后选择 jdp-core-1.1.2.RELEASE.jar。
  2. 右键点击 jdp-core-1.1.2.RELEASE.jar,选择 Add as Library…,设置库的名称(例如 My Local Library),并将其添加到项目的模块依赖中。

步骤三: Maven 添加系统依赖

<dependency><groupId>com.gsww.jdp</groupId><artifactId>jdp-core</artifactId><version>1.1.2.RELEASE</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/libs/jdp-core-1.1.2.RELEASE.jar</systemPath>
</dependency>

步骤三:在代码中使用 JAR 包中的类

一旦 JAR 包被添加为库,你就可以在代码中使用其中的类了。例如:

import com.gsww.jdp.MyClass; // 假设 MyClass 是 jdp-core-1.1.2.RELEASE.jar 包中的一个类  @SpringBootApplication  
public class MyApplication {  public static void main(String[] args) {  MyClass myClass = new MyClass();  // 使用 myClass 中的方法  SpringApplication.run(MyApplication.class, args);  }  
}

四、注意事项

  1. 使用本地 JAR 包通常不是最佳实践,因为它会导致项目依赖于特定路径上的文件,这不利于项目的可移植性和协作开发。在可能的情况下,最好将依赖发布到公共或私有
    Maven 仓库中。
  2. 如果使用 Maven 添加系统依赖,请确保在团队开发中,每个成员都知道如何正确配置本地的 Maven 仓库和 pom.xml 文件。
  3. 在提交项目到版本控制系统(如 Git)时,不要将本地 JAR 包一起提交,因为这样做会增加仓库的大小,并可能导致其他开发者无法正确构建项目。

五、总结

加载本地 JAR 包到 Spring Boot 项目中,可以通过手动复制 JAR 包到项目目录,并在 IDE 中添加为库,或者使用 Maven 的系统依赖功能来实现。在实际开发中,应优先考虑将依赖发布到公共或私有 Maven 仓库,以便更好地管理和协作开发。

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

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

相关文章

【HC32L110】华大低功耗单片机启动文件详解

本文主要记录华大低功耗单片机 HC32L110 的 汇编启动过程&#xff0c;包括startup_hc32l110启动文件详细注释 目录 1.启动文件的作用2.堆栈定义2.1 栈2.2堆 3.向量表4.复位程序5.中断服务程序6.堆栈初始化启动过程详解7.1从0地址开始7.2在Reset_Handler中干了啥&#xff1f; 8.…

PyTorch|保存及加载模型、nn.Sequential、ModuleList和ModuleDict

系列文章目录 PyTorch|Dataset与DataLoader使用、构建自定义数据集 PyTorch|搭建分类网络实例、nn.Module源码学习 pytorch|autograd使用、训练模型 文章目录 系列文章目录一、保存及加载模型&#xff08;一&#xff09;保存及加载模型的权重&#xff08;二&#xff09;保存及…

Rust 语言中的跨平台 GUI 库

在 Rust 社区中&#xff0c;Iced 是值得关注的跨平台 GUI (图形用户界面) 库之一。由 iced-rs 团队开发&#xff0c;Iced的设计灵感来源于 Elm 语言&#xff0c;它以简洁性和类型安全性为特色&#xff0c;旨在提供一个简单易用且功能丰富的 GUI 开发体验。本文将深入探讨 Iced&…

探究欧拉恒等式的美学与数学威力

正如老子所述&#xff0c;“道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物”&#xff0c;数学作为人类认知自然法则的语言&#xff0c;其数系的不断发展象征着对世界理解的深化。从自然数经由分数、无理数至复数&#xff0c;复数虽看似反直觉&#xff0c;却…

MATLAB实现蚁群算法优化柔性车间调度(ACO-fjsp)

蚁群算法优化车间调度的步骤可以分为以下几个主要阶段&#xff1a; 1.初始化阶段&#xff1a; 设置算法参数&#xff0c;如信息素浓度、启发式因子等。这些参数将影响蚂蚁在选择路径时的决策过程。 确定车间调度的具体问题规模&#xff0c;包括工件数量、机器数量以及每个工件…

前端监控系统建设:错误收集、性能监控与用户体验优化

在前端开发过程中&#xff0c;建立一个监控系统是非常重要的&#xff0c;它可以帮助我们实时捕获错误、监控性能&#xff0c;并优化用户体验。下面是一些建设前端监控系统的关键部分。 错误收集&#xff1a;一个好的错误收集系统可以帮助我们迅速发现并修复代码中的错误。我们可…

AI:162-如何使用Python进行图像识别与处理深度学习与卷积神经网络的应用

本文收录于专栏&#xff1a;精通AI实战千例专栏合集 从基础到实践&#xff0c;深入学习。无论你是初学者还是经验丰富的老手&#xff0c;对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码&#xff0c;详细讲解供大家学习&#xff0c;希望可以帮到大家。正…

Beckhoff倍福工业电脑C6240-1037-0030主板维修CB1051-0003 CPU深圳捷达工控维修

Installation and Operating instructions for Control Cabinet PC C6240 from -0060 PS/2 连接 PS/2 上部 PS/2 连接器 (X104) 允许使用 PS/2 鼠标&#xff0c;而 PC 键盘可连接至下部 PS/2 连接器 (X103)。 USB接口 USB1 – USB4 四个 USB 接口 (X108 – X111) 用于通过 US…

OpenHarmony GIF图像渲染库—ohos-gif-drawable

简介 本项目是OpenHarmony系统的一款GIF图像渲染库&#xff0c;基于Canvas进行绘制&#xff0c;主要能力如下: 支持播放GIF图片。支持控制GIF播放/暂停。支持重置GIF播放动画。支持调节GIF播放速率。支持监听GIF所有帧显示完成后的回调。支持设置显示大小。支持7种不同的展示…

面试题:Redis如何防止缓存穿透 + 布隆过滤器原理

题目来源 招银网络-技术-1面 题目描述 缓存穿透是什么&#xff1f;如何防止缓存穿透布隆过滤器的原理是什么&#xff1f; 我的回答 缓存穿透是什么&#xff1f; 攻击者大量请求缓存和数据库中都不存在的key。如何防止缓存穿透 可以使用布隆过滤器布隆过滤器的原理是什么&a…

AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意&#xff1a;从 Docker 19.03 开始&#xff0c;Docker 引入了对 NVIDIA GPU 的原生支持&#xff0c;因此若AI要调用GPU算力的话docker版本也是有要求的&#xff0c;后面博客测试。 当然本篇博客还没设计到GPU的调用&#xff0c;主要Pycharm加Anaconda的方案用习惯了&#…

缓存的使用及常见问题的解决方案

用户通过浏览器向我们发送请求&#xff0c;这个时候浏览器就会建立一个缓存&#xff0c;主要缓存一些静态资源&#xff08;js、css、图片&#xff09;&#xff0c;这样做可以降低之后访问的网络延迟。然后我们可以在Tomcat里面添加一些应用缓存&#xff0c;将一些从数据库查询到…

wsl中ollama不能使用gpu加速

之前还能有gpu加速的&#xff0c; 突然一次发现不能加速了, 启动之后发现只能用cpu了 log time2024-04-19T00:05:08.21308:00 levelINFO sourceimages.go:806 msg"total blobs: 80" time2024-04-19T00:05:08.24808:00 levelINFO sourceimages.go:813 msg"tota…

Flask:URL与视图的映射

默认端口号80、443 blog_id 限制数据类型的话&#xff08;int&#xff09; 除此之外别的数据类型也可以&#xff0c;或者多个&#xff08;用any&#xff09; /book/list?page6

骑砍2霸主MOD开发(5)-游戏事件

一.MissionBehavior Mission任务中发生的事件,AgentSpawn,AgentRemove,BeforeMissionStart等统称为MissionBehavior. 通过在Mission中添加属于自己的MissionBehavior实现对游戏任务事件的捕捉 <1.在MBSubModuleBase中重写OnBeforeMissionBehaviorInitialize(Mission mission…

【笔记】ASP.NET Core Web API之Token验证

在实际开发中经常需要对外提供接口以便客户获取数据&#xff0c;由于数据属于私密信息&#xff0c;并不能随意供其他人访问&#xff0c;所以就需要验证客户身份。那么如何才能验证客户的身份呢&#xff1f;一个简单的小例子&#xff0c;简述ASP.NET Core Web API开发过程中&…

Git学习笔记(三)Git分支

Git分支是Git中非常重要的一个概念&#xff0c;无论是个人开发还是多人协作中&#xff0c;分支都起着至关重要的作用。几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响…

笨蛋学C++【C++基础第二弹】

C基础第二弹 2.C运算2.1运算符2.1.1算术运算符2.1.2关系运算符2.1.3逻辑运算符2.1.4位运算符2.1.5赋值运算符2.1.6杂项运算符2.1.7运算符优先级2.1.8注意 3.C循环3.1Cwhile循环3.1.1语法 3.2Cfor循环3.2.1基于范围的for循环方式13.2.2基于范围的for循环方式23.2.3基于范围的for…

Linux驱动开发笔记(零)驱动基础知识及准备

文章目录 前言一、Liunx、MCU和FPGA编程的区别二、Linux内核模块1. 什么是内核模块2. 内核模块的代码架构3. 头文件4. 模块参数5. makefile说明 三、 驱动程序设计思路1. 基本步骤2. 设备号3. 数据结构3.1 file_operations3.2 file3.3 inode3.4 哈希表3.5 cdev结构体3.6 kobj_m…

[Linux][进程信号][一][信号基础][如何产生信号]详细解读

目录 0.前言预备1.系统定义的信号列表2.核心转储 -- Core Dump 1.信号基础1.信号概念2.信号处理方式概览3.理解信号如何被保存4.信号发送的本质 2.如何产生信号&#xff1f;1.终端按键产生信号2.系统调用接口1.kill()2.raise()3.abort()4.如何理解&#xff1f; 3.由软件条件产生…