Spring Boot打jar包,排除lombok等scope=provided的依赖(转)

lombok可以使实体更简洁,主要是会在编译.class文件期间,生成get/set方法,还有hash/equals/toString等。

主要是可以让代码更简洁。

复制代码
@Data//生成get/set/toString/hash/equals等
@Accessors(chain = true)//开启链式调用,即H2user user = new H2user().setId(1).setName("https://www.cnblogs.com/tomcatandjerry/").setAge(88);
public class H2user {

    private Long id;
    private String name;
    private Integer age;

}
复制代码

在maven项目的pom依赖:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.18</version>
  <scope>provided</scope>
</dependency>

Maven scope=provided的作用范围:参考:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

    • provided
      This is much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

所以像lombok这样的依赖只作用于编译阶段,编译完成就没用了,可以从spring-boot的jar包里排除掉。

默认Spring Boot项目的pom配置:

<plugins>
     <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
</plugins>

但是执行mvn package,你会发现lombok这样的provided的依赖还是进了jar(your-spring-boot.jar\BOOT-INF\lib\)

这会增加最终的jar包的体积(当然有一些代码洁癖的人也是不能忍的)

 

解决方案:

spring-boot-maven-plugin官方目前给出的解决方案是:

复制代码
<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>
复制代码

配置后,重新执行:mvn clean package, lombok的jar已经不在boot.jar里面,应用也可以正常启动: mvn spring-boot:run  或者 java -jar boot.jar

 

参考:https://www.cnblogs.com/tomcatandjerry/p/10342345.html

posted @   思凡念真  阅读(1331)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示