Spring Boot——maven项目常用打包配置

文章目录

    • 一、简介
    • 二、pom.xml
    • 三、效果图
      • 3.1 所有的资源打包到指定的目录maven
      • 3.2 所有的配置文件都放到config目录
      • 3.3 所有的配置文件都不在jar里,防止敏感信息泄露
    • 结语

一、简介

maven项目打包是我们程序员经常遇到的事,今天就来弄一个常用的打包方式,我们需要的结果是:

  • 所有的依赖和源码在一个jar
  • 配置文件可以放到指定的位置,比如和jar同级的config目录
  • 所有的配置文件不在jar包里,防止敏感信息泄露

我们现有的项目路径结果如下:

在这里插入图片描述

二、pom.xml

我这里使用到的版本如下:

groupIdartifactIdversion
org.springframework.bootspring-boot-maven-plugin2.3.12.RELEASE
org.apache.maven.pluginsmaven-compiler-plugin3.8.1
org.apache.maven.pluginsmaven-jar-plugin3.2.0
org.apache.maven.pluginsmaven-resources-plugin3.2.0

第一个是SpringBoot的我建议还是去官网找一个比较稳定的版本,固定好,如果没有指定版本,可能你每次打包的时候,都需要花很多时间去下载依赖,尤其网络不好的时候,更糟心,频繁的版本变更,也容易出现不兼容的问题。详细的解释都在pom.xml里了,大家可以仔细阅读。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.2</version><relativePath/></parent><groupId>com.alian</groupId><artifactId>maven</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>maven</name><description>Spring Boot之maven打包</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><project.package.directory>target</project.package.directory><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>${parent.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${parent.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies><build><plugins><!--spring-boot打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.12.RELEASE</version><executions><execution><goals><!-- 重新打包(可以没有主类) --><goal>repackage</goal></goals></execution></executions><configuration><!-- 打包后的路径--><outputDirectory>${project.package.directory}/${project.artifactId}/</outputDirectory><!-- 打包后的名称 --><finalName>maven</finalName><!-- 打包类型(JAR、WAR、ZIP、DIR、NONE) --><layout>ZIP</layout><!-- 主类 --><mainClass>com.alian.maven.MavenApplication</mainClass><!-- 跳过执行--><!-- <skip>true</skip>--><!-- 包含或者排除--><!--<includes><include><groupId></groupId><artifactId></artifactId></include></includes><excludes><exclude><groupId></groupId><artifactId></artifactId></exclude></excludes>--></configuration></plugin><!--apache编译插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!-- 源代码使用的JDK版本 --><source>1.8</source><!-- 需要生成的目标class文件的编译版本 --><target>1.8</target><!-- 编译的字符集编码 --><encoding>UTF-8</encoding><!-- 跳过测试(此项根据自己需要配置) --><skip>true</skip><!-- 显示正在编译的信息(此项根据自己需要配置) --><verbose>true</verbose><!-- 显示正在编译警告(此项根据自己需要配置) --><showWarnings>true</showWarnings><!-- 允许在单独的进程中运行编译器,后面的参数有用的前提都是此处指定为true,否则用内置的编译器 --><!-- <fork>false</fork>--><!-- 编译器使用的初始内存(一般不用) --><!-- <meminitial>128m</meminitial>--><!-- 编译器使用的最大内存(一般不用) --><!-- <maxmem>512m</maxmem>--></configuration></plugin><!--apache打jar的插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><!-- 为true时生成的jar中,包含pom.xml和pom.properties这两个文件 --><addMavenDescriptor>false</addMavenDescriptor><!-- 生成MANIFEST.MF的设置,用的是spring boot打包可以不配置manifest --><manifest><!-- 解决maven仓库里带时间戳的包的问题,有spring boot打包插件可以不配置 --><!-- <useUniqueVersions>false</useUniqueVersions>--><!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 --><!-- <addClasspath>true</addClasspath>--><!-- 这个jar所依赖的jar包添加classPath的时候的前缀,如果这个jar本身和依赖包在同一级目录,可以不配置 --><!-- <classpathPrefix>lib/</classpathPrefix>--><!-- 主类,有spring boot打包插件可以不配置 --><!-- <mainClass>com.alian.maven.MavenApplication</mainClass>--></manifest><manifestEntries><!-- 在Class-Path下添加配置文件的路径,一般是引入外部配置文件,或者是没有把配置文件打到jar包里,配置的路径是相对你所要运行的jar所在的目录如:比如我的jar同级目录有个config放了资源文件my.xml你配置的是"./",则你配置的路径为classpath:config/my.xml配置的是"./config",则你配置的路径为classpath:my.xml可以配置多个,用空格隔开就行--><Class-Path>./</Class-Path></manifestEntries></archive><!--排除配置的资源文件,具体的你可以根据自己的项目修改,“**/”表示任意目录下的某个(某些)文件--><excludes><exclude>**/application.properties</exclude><exclude>**/logback.xml</exclude><exclude>config</exclude><exclude>config/my.xml</exclude></excludes></configuration></plugin><!--apache打包资源的插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><executions><execution><!--拷贝资源文件--><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><!--输出文件到指定目录,比如我这里是config目录--><outputDirectory>${project.package.directory}/${project.artifactId}/config/</outputDirectory><resources><!--可有包含多个resource,里面可以指定需要拷贝的资源目录,然后可以进行包含或者排除操作,最终放到上面指定的目录--><resource><!--需要拷贝资源文件的目录--><directory>src/main/resources/</directory><!--包含文件,也可以使用排除excludes--><includes><include>**/application.properties</include><include>**/logback.xml</include></includes></resource><resource><!--需要拷贝资源文件的目录--><directory>src/main/resources/config/</directory><!--包含文件,也可以使用排除excludes--><includes><include>my.xml</include></includes></resource></resources></configuration></execution></executions></plugin></plugins></build></project>

三、效果图

3.1 所有的资源打包到指定的目录maven

在这里插入图片描述

3.2 所有的配置文件都放到config目录

在这里插入图片描述

3.3 所有的配置文件都不在jar里,防止敏感信息泄露

在这里插入图片描述

结语

平时工作中正常项目打包基本是够用的,只不过对打包的内容部分进行一点点变更。掌握了这几个插件的配置,一般都能解决自己的打包问题。个人觉得没必要把lib包单独拎出去,分出去有lib的变动时,比如依赖版本的更新之类的,还是得删除,拷贝(哪怕时自动化脚本也是这个操作),同时还增加了classpath的问题,个人建议,没有特殊要求还是放到一起吧。

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

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

相关文章

史上最全ThreadLocal 详解

文章目录一、ThreadLocal简介二、ThreadLocal与Synchronized的区别三、ThreadLocal的简单使用四、ThreadLocal的原理4.1 ThreadLocal的set()方法&#xff1a;4.2 ThreadLocal的get方法4.3 ThreadLocal的remove方法4.4、ThreadLocal与Thread&#xff0c;ThreadLocalMap之间的关系…

Java递归构建树形结构

记录&#xff1a;在Java后台利用递归思路进行构建树形结构数据&#xff0c;返回给前端&#xff0c;能以下拉菜单等形式进行展示。 简明&#xff1a;为了简化代码&#xff0c;引入Lombok的Jar包&#xff0c;可省略实体类set()、get()方法。 <dependency><groupId>or…

HTTP状态码含义:428、429、431、511431状态码详解

1、428 Precondition Required (要求先决条件) ​ 先决条件是客户端发送 HTTP 请求时&#xff0c;必须要满足的一些预设条件。一个好的例子就是 If-None-Match 头&#xff0c;经常用在 GET 请求中。如果指定了 If-None-Match &#xff0c;那么客户端只在响应中的 ETag 改变后才…

Java 异常——Exception详解

异常的介绍 异常的概念 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理…

Java中的URL类根据url获取网络文件快速入门Java中的URL(网络编程)

Java中的URL类 远程连接来实现应用。而且&#xff0c;这个平台现在已经可 以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作。 通过一个URL连接&a…

SpringMVC中Controller为什么能够处理并发访问?Springboot中的定时任务是否会发生阻塞?

文章目录SpringMVC中Controller为什么能够处理并发访问&#xff1f;当多个请求同时访问服务器的时候Controller、Service、DAO是线程安全的吗&#xff1f;关于类中的变量Controller、Service、DAO等类都默认为单例模式Controller、Service、DAO等类中的方法当中的并发问题关于D…

Java进阶 - 易错知识点整理

转载&#xff1a;https://blog.csdn.net/qq_33934427/article/details/125903960 文章目录1、JavaEE2、网络基础3、Mysql4、Spring/SpringMVC&#xff08;IOC装配、AOP增强、常用注解&#xff09;5、Spring Boot/Spring Cloud1&#xff09;SpringBoot部分2&#xff09;SpringCl…

MySQL 视图(详解) navicat如何创建视图

文章目录MySQL 视图&#xff08;详解一&#xff0c;视图概念使用视图的原因二&#xff0c;创建视图&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;创建基于单表的视图【实例 1】【实例 2】&#xff08;3&#xff09;创建基于多表的视图【实例 3】&#xff08;4&a…

使用set集合去除重复元素@EqualsAndHashCode注解

如何使用set集合去重 ​ 我们都知道&#xff0c;set集合是无序的&#xff0c;这样也导致set集合里面的元素是不能重复的&#xff0c;因为这一个特性&#xff0c;所以我们经常用set集合进行去重操作&#xff0c;我们下面以一个简单的例子说明set集合是如何进行去重的。 创建去…

缺少构造方法:Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp

今天遇到了一个奇怪的错误&#xff0c;报错如下图所示&#xff1a; org.springframework.dao.DataIntegrityViolationException: Error attempting to get column question_id from result set. Cause: java.sql.SQLDataException: Unsupported conversion from LONG to java…

SpringBoot瘦身打包部署

一、前言 最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时&#xff0c;编译出来的 Jar 包很大&#xff08;服务器多达500MB&#xff09;。 二、瘦身前的Jar包 SpringBoot编译出来的Jar包中&#xff0c;磁盘占用大的&#xff0c;是一些外部依赖库&#xff…

XShell直接拖拽文件到服务器,不使用Xftp等文件上传工具

很多情况下&#xff0c;我们使用 Xshell 工具时&#xff0c;如果遇到文件的上传和下载会不可避免的要用到另外一个工具 Xftp&#xff0c;但是频繁的使用 Xftp 会比较麻烦&#xff0c;那么有没有一种更加直接简单的方法呢&#xff1f; 当我们所需要上传的文件比较小的时候&…

System.getProperty()方法获取系统变量

今天在阅读JDBC的DriverManager类源码时&#xff0c;看到了这么一句代码&#xff1a; System.getProperty(“jdbc.drivers”)&#xff1b;getProperty()这个方法是获取指定键指示的系统属性的&#xff0c;也就是说上面的代码获取的是jdbc.drivers这个属性。我写了个测试测试输…

局部变量为什么必须赋值才可以使用

在java内存模型中规定&#xff0c;一个新的变量只能在主存中初始化&#xff0c;不允许在工作内存中直接使用一个未被初始化的变量。 工作内存可以理解为局部变量定义的内存区域&#xff0c;也就是线程的工作内存。所谓局部变量就是线程私有的不共享的空间。 类加载准备阶段 类变…

Java 赋值 “=” 讲解

前言 我们从接触java第一天&#xff0c;就是到 是赋值的意思&#xff0c;把等号右边结果的值&#xff0c;赋给等号左边的变量&#xff0c;那具体是怎样赋值呢&#xff1f;你有了解过吗&#xff1f; 1.0版本 大家都知道&#xff0c;java中有 8大基本类型&#xff0c;对于基本…

Linux 系统管理命令:时间、进程、网络、磁盘、关机重启等 top命令用法详解

文章目录系统管理常用命令1. 日期1.1 查看日历: cal1.2 查看/设置时间: date2. 进程2.1 查看进程信息: ps2.2 动态显示进程信息: top2.3 终止进程: kill2.4 服务的管理: service3. 网络3.1 网卡信息查询与配置: ifconfig3.2 检测远程主机连通性: ping3.3 查看网络状态(监听端口…

Java8中计算时间的四种方式及区别Period、Duration、ChronoUnit、Until 时间区间Duration的简单使用

一.简述 在Java8中&#xff0c;我们可以使用以下类来计算日期时间差异&#xff1a; 1.Period 2.Duration 3.ChronoUnit二.Period类 Period类计算只有年、月、日 计算的是LocalDate两个时间间隔的年月日 public static void main(String[] args) {LocalDate startTime Loc…

[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

引言 成员变量和局部变量在每种编程语言中都有涉及&#xff0c;如果之前了解过其他语言的成员变量或者局部变量&#xff0c;那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同&#xff0c;这一块的东西也不能说难&#xff0c;如果第一次接触可能会感觉有点乱&a…

【Java多线程】内存模型JMM—主内存与工作内存分析

文章目录JAVA内存模型JVM主内存与工作内存描述JVM内存间交互规则JVM先行发生原则内存交互基本操作的 3 个特性原子性(Atomicity)可见性(Visibility)有序性(Ordering)上述内存模型与Java多线程之间的问题JAVA内存模型 共享变量&#xff1a;如果一个变量在多个线程的工作内存中都…

SpringBoot配置MyBatis的sql执行超时时间(mysql)

当某些sql因为不知名原因堵塞时&#xff0c;为了不影响后台服务运行&#xff0c;想要给sql增加执行时间限制&#xff0c;超时后就抛异常&#xff0c;保证后台线程不会因为sql堵塞而堵塞。 方法一 yml全局配置&#xff1a;单数据源可以&#xff0c;多数据源时会失效 方法二 j…