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> 

原文地址:https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/exclude-dependency.html

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

原文地址:https://www.cnblogs.com/tomcatandjerry/p/10342345.html

时间: 2024-10-09 18:03:50

Spring Boot打jar包,排除lombok等scope=provided的依赖的相关文章

Spring Boot 以 jar 包方式运行在后台

spring-boot jar 包方式启动: 首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090. 具体方法:在 application.properties 文件里写 server.port=9090. 使用 maven 命令:clean package 打包. 放到服务器上一个合适的位置. 使用 Java -jar spring-boot01-1.0-SNAPSHOT.jar 命令,启动 jar 包. 然后,在浏览器输入 htt

【转】Spring boot 打成jar包问题总结

http://www.cnblogs.com/xingzc/p/5972488.html 1.Unable to find a single main class from the following candidates 1.1.问题描述 maven build时出现以下错误提示日志: [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.5.RELEASE:repackage

Spring Boot导出jar包发布

一:事由 现在的项目组开发项目使用的是Spring Boot的技术,开发的时候是直接通过一个入口主函数来启动项目的.如果将项目交给客户,怎样才能正确的发布运行呢?百度了一下有关的知识,大概了解到是通过导出jar包,直接运行来实现的.不过从网上查阅的资料,都不太理想,于是自己和另外一个同事就倒腾开了.倒腾了好一会,最终找到了一个比较简单有效的方法来实现,现在分享如下. 二:从Eclipse中导出对应的可运行的jar包(这一步是最为关键的) 1:选中对应的java项目——右键——导出 2:选择导出j

spring boot 打jar包,获取resource路径下的文件

前言:最近在spring boot项目静态类中获取resource路径下文件,在idea中启动都可以获取,但是打包后变成了jar包 就无法获取到.我想到了两种方法,一种是根据http访问静态资源比如 localhost:9080/static/template/xxx.ftl文件.另外一种是根据流获取到文件,然后拷贝到新的文件夹下面.下面说的就是第二种方式的代码 public class DocUtil { //此路径是其他方法进行调用,且只需要加载一次private static String

Spring Boot 本地jar包

一:问题场景 在开发过程中,我们有时会遇到Maven中央库没有的jar包,比如公司自己开发的而又没有放入公司私库的jar包,这时就不能通过三围在pom中直接引入.那么怎么在项目中引入这些本地或第三方jar包呢? 二:解决方法 常用的解决方法主要有两种. 第一种是将本地jar包安装在本地maven库.这种方法简单方便,以后其他项目需要引入时不需要再次安装.如果没有放入公司私库,则不适合协同开发,比如一位同事在本地安装了这个jar包,另一位同事通过SVN或git将代码下载下来后,由于本地库没有安装该

spring boot打jar包发布

artifactId 是即将打包的包的名称 version 是即将打包的版本号 packaging 是即将打包的格式,这里讲的是jar包 终端输入命令: mvn clean install 然后在target下查看生成的对应的jar包文件 如何执行呢? 找到一个jdk, 我这边是2.11版本的springboot,需要1.8以上的jdk,然后 java -jar xxx.jar 若有多个jdk安装目录,尤其默认的版本不是1.8以上的,需要制定目录  /opt/jdk1.8.0_131/bin/j

Spring中的jar包详解

下面给大家说说spring众多jar包的特点吧,无论对于初学spring的新手,还是spring高手,这篇文章都会给大家带来知识上的收获,如果你已经十分熟悉本文内容就当做一次温故知新吧.spring.jar 是包含有完整发布的单个jar包,spring.jar中除了spring-mock.jar里所包含的内容外其他所有jar包的内容,因为只有在研发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其他1

spring加载jar包中多个配置文件(转)

转自:http://evan0625.iteye.com/blog/1598366 在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:beanconfigs/applicationContext_1.xml, classpath*:

spring加载jar包中的多个配置文件[转载]

在使用spring加载jar包中的配置文件时,不支持通配符,需要一个一个引入,如下所示: Java代码 <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:beanconfigs/applicationContext_1.xml, classpath*:beanconfigs/applicationContext_2.xml, ...