SpringBoot项目利用maven自定义打包结构

From: https://blog.csdn.net/q15858187033/article/details/80742117

SpringBoot官方提供的demo中,pom.xml文件里引用了官方提供的打包插件

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

        通过这种方式打包出来的项目,所有文件都放在一个jar包中。这使得jar包非常臃肿,不利于服务器上部署。这时候就希望在maven打包的时候,把一些结构分离出jar包外。

        例如一个项目的目录结构是这样的:,最终想打包变成这种结构。其中resources下的配置文件放在config目录下,所有的依赖包放在lib下,程序的启动jar就会变得很小。并且代码改变之后,只需要将打包出来的jar上传到服务器替换后再运行就可以了。

        要自定义打包的结构,需要修改pom.xml文件中<build>标签里的内容

    <build>
            <finalName>FlightChangeService</finalName>
            <resources>
                <resource>
                    <!--指定mapping下的所有xml文件打包在jar中-->
                    <targetPath>${project.build.directory}/classes</targetPath>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                        <include>mapping/*.xml</include>
                    </includes>
                </resource>
                <resource>
                    <!--resources下一级的所有.xml .properties文件复制到config目录下-->
                    <targetPath>${project.build.directory}/config</targetPath>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                        <include>**.xml</include>
                        <include>**.properties</include>
                    </includes>
                </resource>
            </resources>
            <plugins>
                <!--maven-dependency插件,将项目所有依赖包放到lib目录下-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <type>jar</type>
                                <includeTypes>jar</includeTypes>
                                <outputDirectory>
                                    ${project.build.directory}/lib
                                </outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
     
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <classesDirectory>target/classes/</classesDirectory>
                        <archive>
                            <!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
                            <addMavenDescriptor>false</addMavenDescriptor>
                            <manifest>
                                <mainClass>com.loongair.Application</mainClass>
                                <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
                                <useUniqueVersions>false</useUniqueVersions>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                            </manifest>
                            <manifestEntries>
                                <!--jar中的MANIFEST.MF文件ClassPath需要添加config目录才能读取到配置文件-->
                                <Class-Path>config/ .</Class-Path>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>

        执行maven install之后target目录下就生成了我们自定义的包结构了

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

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

相关文章

20169210《Linux内核原理与分析》第十二周作业

Return-to-libc 攻击实验 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址&#xff0c;使得漏洞程序去执行存放在栈中 shellcode。为了阻止这种类型的攻击&#xff0c;一些操作系统使得系统管理员具有使栈不可执行的能力。这样的话&#xff0c;一旦程序…

判断android图片是否硬解码(方法)

2019独角兽企业重金招聘Python工程师标准>>> 在oncreate方面的setContentView(R.layout.main); 前面&#xff0c;添加如下代码&#xff1a; getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HAR…

如何解决Mybatis里mapper文件中关于不能用大于小于号

From: https://blog.csdn.net/qq_38659629/article/details/80408185 用<![CDATA[ ]]>标识 比如&#xff1a;<![CDATA[ where auctionEndTime < now()]]> 另外一种方法就是使用转义字符 < < > > & " < …

Linux C 编程技巧--利用有限状态机模型编程

我们知道&#xff0c;一般编写程序时都要画出流程图&#xff0c;按照流程图结构来编程&#xff0c;如果编写一个比较繁琐&#xff0c;容易思维混乱的程序时&#xff0c;我们可以利用有限状态机模型画出一个状态转移图&#xff0c;这样便可以利用画出的逻辑图来编写程序&#xf…

JVM的垃圾回收机制

发现一篇好文章,能够快速的帮助我们理清楚思路,以下内容转载 JVM的内部结构 先说下jvm运行时数据的划分&#xff0c;粗暴的分可以分为堆区(Heap)和栈区(Stack)&#xff0c;但jvm的分法实际上比这复杂得多&#xff0c;大概分为下面几块&#xff1a; 1、程序计数器(Program Conut…

centos配置ssh免密码登录后仍要输入密码的解决方法

From: https://blog.csdn.net/zwbill/article/details/80448939 前言 在搭建Linux集群服务的时候&#xff0c;主服务器需要启动从服务器的服务&#xff0c;如果通过手动启动&#xff0c;集群内服务器几台还好&#xff0c;要是像阿里1000台的云梯Hadoop集群的话&#xff0c;轨…

Linux c学习--从标准输入输出看流和缓冲区

学习标准输入输出&#xff0c;我们都会遇到一个概念&#xff0c;流和缓冲区&#xff0c;但到底什么是流&#xff0c;什么是缓冲区呢&#xff1f; 书《C Primer Plus》上说&#xff0c;C程序处理一个流而不是直接处理文件。后面的解释十分抽象&#xff1a;『流&#xff08;strea…

ubuntu vim8.0源码安装

安装篇 从https://github.com/vim/vim下载相应zip源码文件&#xff0c;利用unzip vim-master.zip 命令解压到当前用户目录&#xff0c;即~&#xff1b; 解压后进入vim的src目录&#xff0c;首先&#xff0c;即运行 sudo apt-get updata &#xff08;更新系统软件源&#xff09;…

Linux C学习---递归函数

最近学习到了递归&#xff0c;刚开始看&#xff0c;真是头大&#xff0c;函数里面嵌套其本身&#xff0c;到底是怎么个流程啊&#xff1f; 现在&#xff0c;咱们先了解下递归函数的数学原理&#xff1a; 高中的时候就出现很多递归函数&#xff0c;应该是在“级数”那里的习题中…

Java判断两个Date是不是同一天

From: https://blog.csdn.net/xingchenbingbuyu/article/details/82734695 Java判断两个Date是不是同一天 1. 利用Calendar Calendar cal1 Calendar.getInstance(); Calendar cal2 Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); boolean sameDay ca…

js二级下拉被flash档住的解决办法

在<object></object>及以内的代码加入到<script>标签对内<script language"javascript" type"text/javascript"> <param name"wmode" value"transparent" />//背景透明 </script> 转载于:https:/…

iOS:以前笔记,未整理版。太多了,先放着吧。。。。。。。

1、**************************************************************** 单例共享 **************************************************************** 单例 共享信息 .m static OneT *newone nil; (instancetype)shalldata { if (newone nil) { newone [[OneT alloc]init]…

C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等

一、 验证歌德巴赫猜想&#xff1a;任意一个不小于6的偶数都可以表示成两个素数的和。从键盘任意给一个符合条件的数&#xff0c;输出相应的两个素数。 素数&#xff1a;指在一个大于1的自然数中&#xff0c;除了1和此整数自身外&#xff0c;没法被其他自然数整除的数 代码如下…

Calendar的DAY_OF_MONTH, DAY_OF_YEAR, DATE的区别

From: https://blog.csdn.net/weixin_34233679/article/details/87286628 cal1.add(Calendar.DAY_OF_MONTH,1); cal1.add(Calendar.DAY_OF_YEAR,1); cal1.add(Calendar.DATE,1); 就单纯的add操作结果都一样&#xff0c;因为都是将日期1 就没有区别说是在月的日期中加1还是…

Cisco网络防火墙配置方法

这篇文章主要介绍了Cisco网络防火墙配置方法,需要的朋友可以参考下  由于网络防火墙默认禁止所有的通信&#xff0c;因为&#xff0c;只有对其进行适当配置后&#xff0c;才能实现正常的网络通信。  如何配置Cisco网络防火墙  1.进入全局配置模式  ciscoasa#configure …

linux远程登录三种方式telnet,ssh,vnc

linux远程连接三种方式telnet&#xff0c;ssh&#xff0c;vnctelnet和ssh服务只能实现基于字符界面的远程控制&#xff0c;如果要基于图形界面进行远程控制&#xff0c;可以借助免费的VNC来完成。一、telnet连接1.首先进入终端&#xff0c;查看是否安装了telnet服务。linux默认…

老司机学习MyBatis之如何通过select返回Map

From: https://blog.csdn.net/Gaomb_1990/article/details/80638177 一、案例 当要查询的结果是一个Map的时候&#xff0c;这里分为两种情况&#xff1a; ①返回单条记录 <select id"getUserByIdReturnMap" resultType"map"> select id, log…

大数据之Yarn——Capacity调度器概念以及配置

试想一下&#xff0c;你现在所在的公司有一个hadoop的集群。但是A项目组经常做一些定时的BI报表&#xff0c;B项目组则经常使用一些软件做一些临时需求。那么他们肯定会遇到同时提交任务的场景&#xff0c;这个时候到底如何分配资源满足这两个任务呢&#xff1f;是先执行A的任务…

C#基于Socket的简单聊天室实践

序&#xff1a;实现一个基于Socket的简易的聊天室&#xff0c;实现的思路如下&#xff1a; 程序的结构&#xff1a;多个客户端一个服务端&#xff0c;客户端都是向服务端发送消息&#xff0c;然后服务端转发给所有的客户端&#xff0c;这样形成一个简单的聊天室功能。 实现的细…

C/C++经典面试题

面试题1&#xff1a;变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义&#xff0c;不分配地址的称为声明。一个变量可以在多个地方声明&#xff0c;但只能在一个地方定义。加入extern修饰的是变量的声明&#xff0c;说明此变量将在文件以外或在文件后面部分定义…