掌握Maven和SpringBoot的灵活性:定制化lib目录和依赖范围

前言

在开发基于Maven和SpringBoot的项目时,我们经常会使用第三方库来满足需求。然而,有时候我们需要更灵活地控制这些库的依赖范围和加载方式。本文将介绍如何使用Maven和SpringBoot实现定制化的lib目录和依赖范围。经过如下定制化后,打包执行jar时就不会报错(运行日志报错显示使用lib下中jar的类ClassNotFoundExceptionNoClassDefFoundError

场景描述

通常情况下,我们会使用特定的第三方库来满足项目需求。在本例中,我们需要使用华为云的Welink接口SDK作为项目的依赖库。首先,让我们了解一下为什么需要使用这个库。Welink接口SDK可以提供与华为云Welink平台的集成功能,例如用户认证、消息推送等。确保项目中的pom.xml文件包含以下依赖项(注意:以下是遐想的dependency,目前Maven中央仓库没有该依赖):

<!--华为云的Welink接口SDK-->
<dependency><groupId>welink</groupId><artifactId>welink-sdk-java</artifactId><version>2.2.0</version>
</dependency>

默认情况下,Maven会从Maven仓库中下载该库的jar包,并将其放入项目的classpath中。然而,有时候可能会遇到Maven镜像仓库无法下载到该依赖项的情况(例如上述依赖),或者我们希望将这个库作为项目的特定依赖,而不是放在整个项目的classpath中。

解决

步骤一

为了实现这个目标,我们可以通过修改该依赖项的scopesystem,并指定systemPath来引用我们自己的jar包。这样,我们就可以将jar包放入项目的lib目录中,并在pom.xml文件中进行如下配置:

<!--华为云的Welink接口SDK-->
<dependency><groupId>welink</groupId><artifactId>welink-sdk-java</artifactId><version>2.2.0</version><scope>system</scope><systemPath>${project.basedir}/lib/welink-sdk-java-2.2.0.jar</systemPath>
</dependency>

在这个例子中,我们将Welink接口SDK的scope设置为system,并指定systemPath为项目根目录下的lib目录中的jar包。
在这里插入图片描述

常见问题解答:

  • Q: 如何获取Welink接口SDK的jar包?
    A: 您可以到华为云官方网站下载适用于您的项目的最新版本的Welink接口SDK的jar包。
  • Q: 如果我使用的是其他版本的Welink接口SDK,我需要如何更新pom.xml中的依赖项?
    A: 只需将该依赖项的systemPath更改指向你放在lib目录下新下载的jar包即可。

步骤二

除了定制化lib目录外,我们还可能需要对依赖项的加载范围进行定制。默认情况下,Maven会将所有的依赖项都打包到生成的可执行jar文件中。然而,在某些情况下,我们可能只希望将某些依赖项作为项目的运行时依赖,而不包含在可执行jar文件中。

在SpringBoot项目中,我们可以通过配置spring-boot-maven-plugin来实现这一目标。在pom.xml文件中,我们可以添加以下配置:

<build><plugins><!-- 打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope><mainClass>com.luntek.financialattendance.FinancialAttendanceApplication</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

在这个例子中,我们将spring-boot-maven-plugin插件的:

  1. includeSystemScope配置项设置为true。这样,该插件将会在打包可执行jar文件时包含所有的系统作用域的依赖项。
  2. <mainClass>com.luntek.financialattendance.FinancialAttendanceApplication</mainClass>:指定Spring Boot应用程序的主类。这是指定可执行jar文件的入口点,该类将被用作应用程序的入口。在运行可执行jar文件时,会自动加载这个类。您需要将com.luntek.financialattendance.FinancialAttendanceApplication替换为您自己应用程序的主类。
  3. <execution>:表示一次插件的执行,可以包含多个<execution>定义。
  4. <goals>:表示插件的目标(goal),指定要执行的插件任务。在这个例子中,我们指定了goalrepackage,表示执行重新打包的任务。这个任务会将项目编译、打包为一个可执行jar文件。

常见问题解答:

  • Q: 如何确定哪些依赖项需要包含或排除?
    A: 根据项目需求和功能要求,确定哪些依赖项是必需的,并将它们添加到或从可执行jar文件中包含。
  • Q: 如果我的项目包含子模块,该怎么处理这些依赖项?
    A: 每个子模块的依赖项可以在其各自的pom.xml文件中进行配置,以提供更细粒度的控制。

总结

通过定制化lib目录和依赖范围,我们可以更灵活地控制项目中使用的第三方库。使用Maven和SpringBoot提供的功能,我们可以根据项目需求来定制依赖项的加载方式,从而提高项目的灵活性和可维护性。

建议和最佳实践:

  • 对于定制化 lib 目录中的第三方库,建议使用版本控制工具(比如Git)来管理更新和升级,以避免潜在的依赖冲突和可维护性问题。
  • 保持依赖项的版本更新,并定期查看项目所使用的库的最新版本,以获取新功能和修复的bug。

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

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

相关文章

[PyTorch][chapter 61][强化学习-免模型学习1]

前言&#xff1a; 在现实的学习任务中&#xff0c;环境 其中的转移概率P,奖赏函数R 是未知的&#xff0c;或者状态X也是未知的 称为免模型学习&#xff08;model-free learning&#xff09; 目录&#xff1a; 1: 蒙特卡洛强化学习 2&#xff1a;同策略-蒙特卡洛强化学习 3&am…

阿里云免费服务器

文章目录 最近的阿里云活动By the way在云服务器ECS上搭建个人网站正文补充:定期释放补充:不知道阿里云服务器的密码怎么办?成果补充&#xff1a;怎么找到实例操作的后台&#xff1f;补充&#xff1a;怎么查看服务器到期时间&#xff1f; 究竟白嫖了多少&#xff1f;最后&…

修复dinput8.dll文件的缺失,以及修复dinput8.dll文件时需要注意什么

dinput8.dll文件通常在使用大型游戏时容易出现dinput8.dll文件丢失的情况&#xff0c;今天这篇文章将要教大家修复dinput8.dll文件的缺失&#xff0c;同时在修复dinput8.dll文件时需要注意些什么&#xff1f;防止文件在修复的过程中出现其他的错误。 dinput8.dll是DirectInput库…

部署ELK

一、elasticsearch #拉取镜像 docker pull elasticsearch:7.12.1 #创建ELK docker网络 docker network create elk #启动ELK docker run -d --name es --net elk -P -e "discovery.typesingle-node" elasticsearch:7.12.1 #拷贝配置文件 docker cp es:/usr/share/el…

Visual Studio Code 常用快捷键大全

Visual Studio Code 常用快捷键大全 快捷键是编码过程中经常使用&#xff0c;且能够极大提升效率的部分&#xff0c;这里给大家介绍一些VS Code中非常有用的快捷键。 打开和关闭侧边栏 Mac — Command B Windows — Ctrl B Ubuntu — Ctrl B 选择单词 Mac — Command D …

“第六十天”

SRAM和DRAM&#xff1a; DRAM&#xff1a;动态RAM&#xff08;随机存期存储器&#xff09;&#xff0c;是使用栅极电容存储信息的&#xff1b; SRAM&#xff1a;静态RAM&#xff0c;是使用双稳态触发器存储信息的。 重点在于DRAM由于要通过电容放电来表示信息&#xff0c;所…

逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

Facebook 于前日发布了新的 JavaScript 引擎&#xff1a;Hermes&#xff0c;专注于提高 React Native 应用的性能&#xff0c;并且在市面上那些内存较少、存储速度较慢且计算能力低下的移动设备上都有良好的表现。但是不是为了追赶Flutter&#xff1f;这块作者没有说明。 移动应…

【JMeter】插件管理工具

1. 官方下载地址 Documentation :: JMeter-Plugins.org 2.安装 将该插件的jar包移动到lib/ext下 3.重启JMeter就可以看到插件管理器 4. 安装&#xff0c;更新&#xff0c;删除插件 安装插件 删除插件 更新插件

深入理解WPF中的依赖注入和控制反转

在WPF开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff09;和控制反转&#xff08;Inversion of Control&#xff09;是程序解耦的关键&#xff0c;在当今软件工程中占有举足轻重的地位&#xff0c;两者之间有着密不可分的联系。今天就以一个简单的小例子&…

防止重复提交请求

前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 axios 实现请求 loading 效果 用一个数组保存当前请求的 url&#xff0c;此时还未响应。如果再次发起同样请求&#xff0c;比对 url 发现已经存在数组中&#xff0c;则拦截请求&a…

Java 谈谈你对OOM的认识

文章目录 前言一、基础架构二、常见OOM1、栈内存溢出java.lang.StackOverflowError2、堆内存溢出java.lang.OutOfMemoryError&#xff1a;Java heap space3、GC回收时间过长java.lang.OutOfMemoryError: GC overhead limit exceeded4、NIO程序堆外内存溢出java.lang.OutOfMemor…

thinkphp漏洞复现

thinkphp漏洞复现 ThinkPHP 2.x 任意代码执行漏洞Thinkphp5 5.0.22/5.1.29 远程代码执行ThinkPHP5 5.0.23 远程代码执行ThinkPHP5 SQL Injection Vulnerability && Sensitive Information Disclosure VulnerabilityThinkPHP Lang Local File Inclusion ThinkPHP 2.x 任…

Vue 条件渲染 与 列表渲染

目录 一、条件渲染 1.简介 : 2.v-if实例 : 3.v-show实例 : 4.v-if与v-show的区别 : 二、列表渲染 1.基本用法 : 1.1 v-for遍历数组 1.2 v-for遍历对象 2.应用实例 : 一、条件渲染 1.简介 : (1) Vue提供了v-if 和 v-show条件指令来完成条件渲染/控制。 v-if指令用于条…

sql server数据库跟踪——SQL Server Profiler解析

工具&#xff1a; SQL Server Profiler这个工具是SQL Server数据库自带的语句执行跟踪工具&#xff0c;常使用于分析软件修改数据库时所执行的语句&#xff0c;适合用来研究软件运行数据库的原理。 打开方式&#xff1a; 本机安装了SQL server的话&#xff0c;都是自带的。直接…

高效学习工具之AnkiMobile新手入门指南(ios端,包括ipad、ihpone设备)————创建、使用、备份、设置参数、相关资料

文章目录 0 背景0.1 闭环学习0.2 什么是anki0.3 anki践行者经验分享 1 开始使用1.1 导入1.2 创建空白组1.3 创建卡片1.3.1 利用anki创建卡片的两种方法1.3.2 复习材料分类 1.4 筛选&#xff08;做减法&#xff0c;拆分学习&#xff08;做子卡牌集合&#xff09;&#xff09;&am…

用于 GaN-HEMT 功率器件仿真的 TCAD 方法论

目录 标题&#xff1a;TCAD Methodology for Simulation of GaN-HEMT Power Devices来源&#xff1a;Proceedings of the 26th International Symposium on Power Semiconductor Devices & ICs(14年 ISPSD)GaN-HEMT仿真面临的挑战文章研究了什么文章的创新点文章的研究方法…

如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程

前言 我的科研论文中需要绘制一个精美的折线图&#xff0c;我的折线图中有三条曲线&#xff0c;分别表示期望角速度指令信号&#xff0c;和实际的角速度信号&#xff0c;还有实际的航向角信号&#xff0c;现在我已经拥有了数据&#xff0c;使用Python中matplotlib.plt.plot来直…

基于梯度算法的无人机航迹规划-附代码

基于梯度算法的无人机航迹规划 文章目录 基于梯度算法的无人机航迹规划1.梯度搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用梯度算法来优化无人机航迹规划。 1.梯度搜索算法 …

汽车标定技术(三)--XCP协议如何支持测量功能

目录 1. 概述 2. 测量方式 -- Poll 3. 测量方式 -- DAQ 3.1 ODT概念模型 3.2 DAQ List概念 3.3 ODT 绝对编号和相对编号 3.4 静态DAQ和动态DAQ模式 &#xff08;1&#xff09;静态DAQ &#xff08;2&#xff09;动态DAQ 4.小结 1. 概述 在该系列的首篇文章汽车标定技…

Sybase PowerDesigner 16.7.7.7536 Crack

Power Designer 是Sybase公司的CASE工具集&#xff0c;使用它可以方便地对管理信息系统进行分析设计&#xff0c;他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型&#xff0c;还可以为数据仓库制作结构模型&#xff0c…