我是靠谱客的博主 冷艳刺猬,这篇文章主要介绍SpringBoot打包成jar包时配置分离,依赖jar分离开始正片:,现在分享给大家,希望可以做个参考。

前言:

在springboot官方文档中貌似没找到,把依赖和配置文件打包出来的教学。不过却看到了有趣的东西。那就是spingboot加载配置文件的顺序,优先级由高到底,高优先级的配置会覆盖低优先级的配置;
–file:./config/
–file:./
–classpath:/config/
–classpath:/

所以当时想的第一种方法就是配置一下pom.xml打包的时候排除config下的所有配置文件,手动copy一个config文件夹在jar包旁边。这样通过命令行启动的时候呢就会springboot自动加载当前目录下的config,优先级高覆盖,完美解决的配置文件的问题。的确一开始我也是这样做的。后来翻了翻百度。发现原来公司里面还要分离jar包,目的是另外如果某个依赖jar有修改,则只需要替换依赖的jar并重启即可,不需要重新打包。所以这里就学习了一下,记录下来。

开始正片:

使用到的插件是:
maven-jar-plugin
maven-assembly-plugin

目录结构:

在这里插入图片描述
这里看到主要的需要分离的是config下的配置文件。所以下一步配置pom.xml

先配置打包jar包的插件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- 打jar包的插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib</classpathPrefix> <!-- 程序启动入口 --> <mainClass>com.awakeyo.wangpengdemo.WangpengdemoApplication</mainClass> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <excludes> <exclude>config/**</exclude> </excludes> </configuration> </plugin>

maven-jar-plugin的配置:
manifest的部分是核心,在可执行的jar文件中,打包后会在jar文件内的META-INF文件夹下,生成一个MANIFEST.MF文件,里面记录了可执行文件的一些相关配置,比如像上面一段代码中所配置的内容,这里面就配置了可执行jar文件未来读取classpath的相对目录位置在什么地方,以及引入的jar文件都有哪些
mainClass:哪个class作为程序的入口来执行
addClasspath:是否将依赖的classpath一起打包
classpathPrefix:依赖的classpath的前缀,也就是打包后生成的MANIFEST.MF文件里,引入的jar文件都会加上前缀,lib/,比如fastjson-1.2.7.jar,在mainfest文件里就会是lib/fastjson-1.2.7.jar
excludes:排除哪些文件夹不被打包进去

配置将jar包和外部配置等文件整体打包

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <!--jar包名称--> <finalName>${project.artifactId}-${project.version}</finalName> <!--描述文件路径--> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-zip</id> <!-- 绑定到package生命周期阶段上 --> <phase>package</phase> <goals> <!-- 只运行一次 --> <goal>single</goal> </goals> </execution> </executions> </plugin>

配置assembly.xml 文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?xml version="1.0" encoding="UTF-8"?> <assembly> <!-- 可自定义,这里指定的是项目环境 --> <!-- spring-boot-assembly-local-1.0.RELEASE.tar.gz --> <id>${profileActive}-${project.version}</id> <!-- 打包的类型,如果有N个,将会打N个类型的包 --> <formats> <!-- <format>tar.gz</format>--> <format>zip</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <!-- 0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限; 0644->即用户具有读写权限,组用户和其它用户具有只读权限; --> <!-- 将src/bin目录下的所有文件输出到打包后的bin目录中 --> <fileSet> <directory>${basedir}/src/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>**.sh</include> <include>**.bat</include> </includes> </fileSet> <!-- 指定输出target/classes中的配置文件到config目录中 --> <fileSet> <directory>${basedir}/target/classes/config</directory> <outputDirectory>config</outputDirectory> <fileMode>0644</fileMode> <includes> <include>application.yml</include> <include>application-${profileActive}.yml</include> <!-- <include>mapper/**/*.xml</include>--> <!-- <include>static/**</include>--> <!-- <include>templates/**</include>--> <!-- <include>*.xml</include>--> <include>*.properties</include> </includes> </fileSet> <!-- 将项目启动jar打包到boot目录中 --> <fileSet> <directory>${basedir}/target</directory> <outputDirectory>/</outputDirectory> <fileMode>0755</fileMode> <includes> <include>${project.build.finalName}.jar</include> </includes> </fileSet> </fileSets> <!-- 将第三方依赖打包到lib目录中 --> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> <!--<unpack>false</unpack> --> <excludes> <!--<exclude>${project.name}-${project.version}</exclude> --> <exclude>${groupId}:${artifactId}</exclude> </excludes> </dependencySet> </dependencySets> <!-- 包含根目录下的文件 --> <!-- <fileSet>--> <!-- <directory>${basedir}</directory>--> <!-- <includes>--> <!-- <include>NOTICE</include>--> <!-- <include>LICENSE</include>--> <!-- <include>*.md</include>--> <!-- </includes>--> <!-- </fileSet>--> </assembly>

最后打包即可,最终目录如图在这里插入图片描述
写了个等于没写的shell脚本,进bin目下

复制代码
1
2
./demostart.sh

即可启动springboot项目。
在这里插入图片描述
看到springboot输出就安心了。

语法主要参考于blog:
https://www.iteye.com/blog/blueram-1684070
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

最后

以上就是冷艳刺猬最近收集整理的关于SpringBoot打包成jar包时配置分离,依赖jar分离开始正片:的全部内容,更多相关SpringBoot打包成jar包时配置分离内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部