掌握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.hqwc.cn/news/160178.html

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

相关文章

数据库实验:SQL的数据视图

目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表&#xff0c;其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一…

关于ROS的网络通讯方式TCP/UDP

一、TCP与UDP TCP/IP协议族为传输层指明了两个协议&#xff1a;TCP和UDP&#xff0c;它们都是作为应同程序和网络操作的中介物。 **TCP&#xff08;Transmission Control Protocol&#xff09;协议全称是传输控制协议&#xff0c;是一种面向连接的、可靠的、基于字节流的传输…

k8s:二进制搭建 Kubernetes v1.20

目录 1 操作系统初始化配置 2 部署 etcd 集群 2.1 准备签发证书环境 2.2 生成Etcd证书 3 部署 docker引擎 4 部署 Master 组件 5 部署 Worker Node 组件 k8s集群master01&#xff1a;192.168.30.105 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集…

使用QEMU模拟启动uboot

uboot的相关知识&#xff0c;可以参考&#xff1a;uboot基本概念。 一、环境配置 WSL: ubutu20.04 模拟开发板&#xff1a;vexpress-a9 uboot版本&#xff1a;u-boot-2023.10 二、安装QEMU 2.1、安装sudo apt install qemu2.2、查看支持哪些开发板qemu-system-arm -M help结…

点亮户外空间:户外灯饰的选择与设计

在我们的日常生活中&#xff0c;户外空间变得越来越重要。庭院、露台和花园不再只是白天的领地&#xff0c;夜幕降临时&#xff0c;它们也成为了社交和放松的场所。要想让户外空间在夜间同样迷人&#xff0c;户外灯饰变得至关重要。本文将带您深入了解户外灯饰的选择与设计&…

ZKP Introduction of Nova (Yu Guo) 手写笔记

ZKP学习笔记 郭宇老师Nova课程手写笔记

〔001〕虚幻 UE5 发送 get、post 请求、读取 json 文件

✨ 目录 🎈 安装 varest 扩展🎈 开启 varest 扩展🎈 发送 get 请求🎈 发送 post 请求🎈 读取 json 文件🎈 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支持 json 文件的读取,最关键是该…

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

STM32-HAL库08-TIM的输出比较模式&#xff08;输出PWM的另一种方式&#xff09; 一、所用材料&#xff1a; STM32F103C6T6最小系统板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 示波器或者逻辑分析仪 二、所学内容&#xff1a; 通过定时器TIM的输出比较模式得到预…

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…

STM32基本定时器中断

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、STM32定时器的结构&#xff1f;1. 51定时器的结构1.1如何实现定时1s的功能&#xff1f; 2. stm32定时器的结构2.1 通用定时器 二、使用步骤1.开启时钟2.初始…

Linux文本编辑器vim使用和配置详解

vim介绍 ​ vim是Linux的一款文本编辑器&#xff0c;可以用来编辑代码&#xff0c;而且支持语法高亮&#xff0c;还可以进行一系列配置使vim更多样化。也可以运行于windows&#xff0c;mac os上。 ​ vim有多种模式&#xff0c;但目前我们只介绍绝大多数场景用的到的模式&…

SpringBoot整合数据库版本管理工具Liquibase,赶紧整起来!

SpringBoot整合数据库版本管理工具Liquibase 背景一、什么是数据库版本管理工具&#xff1f;数据库版本管理工具主要特性什么是数据库版本管理工具Flyway和Liquibase对比及选型 二、Liquibase整合步骤1.引入pom依赖2.配置application.yml3.新建master.xml&#xff08;用于配置你…