spring-boot-maven-plugin:打包时排除provided依赖问题
作者:lyterrific 发布时间:2023-07-18 02:12:11
spring-boot-maven-plugin:打包时排除provided依赖
spring-boot-maven-plugin 插件提供spring boot的maven打包支持。
项目中scope为provided的依赖,比如 lombok、mybatis-plus 等,只作用于编译阶段,编译完成就可以功成身退了。
在spring maven打包时,provided依赖会排除在包外,但springboot maven打包时,还会将这些依赖打进 war 包的 lib-provided 文件夹里或 jar 包的 lib 文件夹里。
springboot项目构建jar包或war包的命令为repackage,作用于maven生命周期的package阶段,在 mvn package 执行之后,这个命令再次打包生成可执行的包,例如打jar包时,生成可执行jar包,同时将 mvn package 生成的 jar 重命名为 *.origin。
默认情况下,repackage会将工程中引入的任何依赖打到包中。
以lombok为例,官方提供了以下方式可以将provided依赖从springboot项目包中排除。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
通过指定groupId和artifactId排除某个特定的依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
指定groupId排除groupId相关的所有依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeGroupIds>org.projectlombok</excludeGroupIds>
</configuration>
</plugin>
</plugins>
</build>
maven-compiler-plugin和spring-boot-maven-plugin的选择
在搭建springboot项目时候,会遇到maven打包插件报错的情况,笔者做了一个测试,对这2种方式进行一个验证
maven-compiler-plugin方式
此种方式打出的包是一个普通jar,并不能执行,但是可以被引用其中的bean。可以点开其jar包一探究竟,发现并没有把依赖打进包里。
不含有root-inf,没有依赖被打进来。
spring-boot-maven-plugin方式
这种方式打出的包可执行,但是我并没有去验证其中的bean是否可以被引用。网上说不可被引用,有待进一步验证。
打好的包到服务器上运行,可运行 ,且含有完整的依赖包
来源:https://blog.csdn.net/u010406047/article/details/110386983
猜你喜欢
- 如下所示://判断整数(int)private boolean isInteger(String str) {if (null == str
- 为什么要重复造轮子你可能会问,Spring已经自带了全局异常拦截,为什么还要重复造轮子呢?这是个好问题,我觉得有以下几个原因装逼Spring
- Spring Data Jpa 自定义方法的实现最近项目中用到了Spring Data JPA,在里面我继承了一个PagingAndSort
- 注释介绍@Cacheable@Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存@Cacheable 作用
- 什么是 MyBatis?MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 J
- 前言:其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组、List等等来写出
- 下面给大家介绍下mybatis结果生成键值对的实例代码,具体内容如下所示:在实际应用中我们经常会遇到这样的情况,需要给下拉框赋值,这个时候就
- 前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。一:猜数字游戏基本介绍&对程序预期.猜数字游戏,
- IntelliJ IDEA是很多程序员必备且在业界被公认为最好的Java开发工具,有很多小伙伴在安装完IDEA并且tomcat之后,启动to
- 引言内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在
- 递归方法定义本身调用方法本身的现象叫做递归在这之前我们学的东西:例如StringBuffer.append().append().appen
- 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchr
- 比较适合新手。逻辑上仍然有点问题。可以用于学习java文件操作下载地址:http://yun.baidu.com/share/link?sh
- 一、百度百科Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防
- 简介本文主要讲解如何用java Selenium 控制鼠标在浏览器上的操作方法。主要列举的代码示例,无图显示。可以自己上代码执行操作看效果。
- Java 线程池原理Executor框架的两级调度模型在HotSpot VM的模型中,Java线程被一对一映射为本地操作系统线程。JAVA线
- 前言Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util
- 在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤s
- final,static,this,super 关键字总结正文开始@Assassin1. final 关键字:final 关键字,意思是最终
- import java.io.BufferedInputStream;import java.io.BufferedOutputStream