SpringBoot打包分离资源文件
SpringBoot使用内置tomcat打包会非常简单,但是默认的SpringBoot的maven插件打包会将所有三方jar和配置文件打包成一个jar。但是在个人或者公司需要做一些小项目或者工具之类的,需要将三方jar包和配置文件分离。就需要利用maven插件来做打包了
SpringBoot打包
先来看下SpringBoot的插件的打包代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.web.Application</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
|
代码比较简单,不多介绍。
maven-jar-plugin
我使用的assembly打包的方式,当然方法肯定不止一种,由于这种成功了,就没有去尝试其他了。
在使用这种插件的时候先要接触另外一种插件maven-jar-plugin,这个插件主要目的是将主项目打包成jar,而且指定jar的资源路径(实际就是配置_MANIFEST.MF文件_)。可以查看官网地址!有详细说明。链接直接看我的代码
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
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <mainClass>com.scxx.web.ScxxApplication</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <excludes> <exclude>application-*.yml</exclude> <exclude>config/**</exclude> <exclude>build/**</exclude> </excludes> </configuration> </plugin>
|
插件主要做的事情就是打包主项目jar,指定class-path路径。同时过滤掉不想打入jar包的文件。这样jar包就ok了。我们看下META-INF资源文件写了什么
1 2 3 4 5 6 7 8 9 10 11 12
| Manifest-Version: 1.0 Implementation-Title: web Implementation-Version: 0.0.1 Archiver-Version: Plexus Archiver Implementation-Vendor-Id: com.scxx.tool // 注意的 ./ 实际就是上面配置的Class-path Class-Path: ./ lib/test-0.0.1.jar lib/base-0.0.1.jar *** (lib文件很多,我过滤掉了) Created-By: Apache Maven 3.6.1 Build-Jdk: 1.8.0_131 Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo ot-starter-parent/kit/web Main-Class: com.web.Application
|
maven-assembly-plugin
接下来开始使用maven-assembly-plugin插件做压缩和资源整理。官网链接
直接看代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/resources/build/release.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
|
很普通,因为重点不是不在这里,主要在他指定的release.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
| <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>dist</id> <formats> <format>tar.gz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <dependencySets> <dependencySet> <useProjectArtifact>false</useProjectArtifact> <outputDirectory>lib</outputDirectory> <unpack>false</unpack> </dependencySet> </dependencySets> <fileSets> <fileSet> <directory>${project.basedir}/src/main/resources/build</directory> <outputDirectory>./</outputDirectory> <includes> <include>*.txt</include> <include>bin/**</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/db</directory> <outputDirectory>./db</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}/src/main/resources</directory> <outputDirectory /> <includes> <include>application-release.yml</include> <include>application-business.yml</include> <include>*.xml</include> <include>*.properties</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}</directory> <outputDirectory /> <includes> <include>*.jar</include> </includes> </fileSet> </fileSets> </assembly>
|
此处主要理解fileSet
的使用即可。将自己需要的文件要按路径打包压缩文件中! 需要注意的点都已经写在里面了。每个人可以根据自己的需求来制定自己的打包方式。
也可以参考这个项目的打包方式!链接