先看本文自定义打包实现的结果
bin目录:存放jar项目启动的各种脚本
boot目录:存放jar项目
conf目录:存放Spring项目的配置文件,各个环境的application-xxx.yml文件
jre目录:个人实现jre文件的外置设置,方便在各种环境运行java
lib目录:存放该项目依赖的类库文件
和预期的有差别也没事,自定义嘛,了解实现的原理和思路之后,都不是问题,不需要哪些,需要哪些都可以自己配
准备工作:
把需要打包 的文件放入项目目录中(可以自己随意,后面对应的配置文件路径引用对了就行)
1.在需要的打包模块的pom中,将原有SpringBoot默认的打包方式注释
2.在该pom中新增自定义的maven打包配置
注意要放在标签中
<!--使用Maven的assembly插件是实现自定义打包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- 配置清单(MANIFEST)属性 -->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 程序主函数入口 完全限定路径-->
<mainClass>com.xxx.xxxApplication</mainClass>
<!-- 添加到classpath 开关 -->
<addClasspath>true</addClasspath>
<!-- classpath-依赖包路径 -->
<classpathPrefix>../lib/</classpathPrefix>
</manifest>
<!-- 配置清单(MANIFEST)属性 -->
<manifestEntries>
<Class-Path>../conf/resources/</Class-Path>
</manifestEntries>
</archive>
<!-- 过滤掉不希望包含在运行的项目jar中的文件
因为我在resource目录下放了jre文件,实现外置,因此要过滤掉不放启动文件里 -->
<excludes>
<exclude>jre/**</exclude>
</excludes>
</configuration>
</plugin>
<!--引用maven的assembly依赖-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<!--指明使用的assembly.xml文件的路径-->
<descriptor>src/main/resources/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
PS: 这里注意引入 该模块的主启动类完全限定类路径和assembly.xml文件的路径
为确保无误,可利用IDEA获得路径:
获取主启动类完全限定类名:
获取assembly.xml文件的路径
3.在指定的目录中新建assembly.xml文件,用于配置自定义的打包设置
<assembly>
<!--打包的后缀名,可自定义-->
<id>assembly</id>
<!--打包后的格式 可以war zip jar 常见的压缩格式都行-->
<formats>
<format>zip</format>
</formats>
<baseDirectory>${project.artifactId}-${project.version}/</baseDirectory>
<files>
<file>
<source>target/${project.artifactId}-${project.version}.jar</source>
<outputDirectory>boot/</outputDirectory>
<destName>${project.artifactId}-${project.version}.jar</destName>
</file>
</files>
<fileSets>
<!--将项目根目录的所有txt和md文件,打包后放在根目录下-->
<fileSet>
<directory>./</directory>
<outputDirectory>./</outputDirectory>
<includes>
<include>*.txt</include>
<include>*.md</include>
</includes>
</fileSet>
<!--将jre打包到单独的jre文件目录下-->
<fileSet>
<directory>src/main/resources/jre</directory>
<outputDirectory>jre</outputDirectory>
<includes>
<include>**</include>
</includes>
</fileSet>
<!--将项目里scripts包里的所有shell运行脚本文件和window脚本,打包后放在bin目录下-->
<fileSet>
<directory>src/main/resources/bin</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
<include>*.bat</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
<!--将项目的静态资源里的所有文件打包后放在conf/resources/static/目录下-->
<!-- <fileSet>
<directory>src/main/resources/static</directory>
<outputDirectory>conf/resources/static/</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>-->
<!--将项目的静态资源里的所有文件打包后放在conf/resources/static/目录下-->
<!-- <fileSet>
<directory>src/main/resources</directory>
<outputDirectory>conf/resources</outputDirectory>
<includes>
<include>*.db</include>
</includes>
</fileSet>-->
<!--将resources的配置文件打包后放到conf目录-->
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<!--<include>*.properties</include>-->
<!--<include>*.conf</include>-->
<include>*.yml</include>
<!--<include>*.txt</include>-->
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<!--是否使用项目自身的的Artifact-->
<useProjectArtifact>true</useProjectArtifact>
<!--指定存放到目录打包后的lib目录下-->
<outputDirectory>/lib</outputDirectory>
<!--运行时的依赖库都包含进去-->
<scope>runtime</scope>
<includes>
<include>*:*</include>
</includes>
<!--把热部署的配置移除,否则容易出问题-->
<excludes>
<exclude>${groupId}:${artifactId}</exclude>
<exclude>org.springframework.boot:spring-boot-devtools</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>
4.使用IDEA的Maven 工具打包
记得把test关了,不然很慢,以防万一,先clean 清理一遍,再package
5.打包后的效果
会生成两个压缩包,最大那个,且带有自己标志后缀的压缩包就是可用的,解压后就是我们开头看到的效果,可以拿去直接部署了