Spring Boot自带spring-boot-maven-plugin 插件,但是spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行的需求。
这里我们使用了,Maven的如下插件:
maven-compiler-plugin java编译插件,可以配置jdk版本
maven-jar-plugin 负责将应用程序打包成可执行的jar文件
maven-assembly-plugin 负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署
最终的可运行文件jar文件并不包含依赖的jar包,和打包前src/main/resources/config中的配置文件, 所有依赖的jar包都放在和可运行文件jar文件平行的lib文件夹内,这样如果以后想快速部署,就不用每一次都把体积很大的lib包都要传一遍,除非依赖包有所变化,当然这些都是后续如果想这么做的前提,我这里还是为了使部署的文件比较规整
其中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配置表示,排除哪些文件夹不被打包进去
解压后使用命令后台启动: nohup java -jar xxx.jar >/dev/null&
这里我们使用了,Maven的如下插件:
maven-compiler-plugin java编译插件,可以配置jdk版本
maven-jar-plugin 负责将应用程序打包成可执行的jar文件
maven-assembly-plugin 负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署
项目目录结构:
项目目录结构介绍:
(1).config : #将Spring的一些xml配置更改为基于java的配置,比如:整合Mybatis 整合Druid数据源,这些配置中一些基本配置都是写死的,因为它们不是经常变化的(可以参考前面写的一些博客)
(2).HelloApplication : #Spring Boot启动入口,内含main方法
(3).(4).(5).src/main/resources/config :
application.properties : #该文件放到src/main/resources下也是可以加载的
logback-spring.xml : #日志文件,默认要放到src/main/resources下,如果放到src/main/resources/config下,就需要在application.properties中配置logging.config=classpath:config/logback-spring.xml
path.properties : #放置一些调用第三方服务的接口地址,避免放在application.properties造成数据太多
(6).src/main/resources/static : #css,js,图片等静态资源存放路径
(7).src/main/resources/templates : #Thymeleaf模板,动态页面,类似于jsp
(8).src/main/build : #package.xml 中存放这篇博客的核心,就是将 配置文件从jar中抽离
打包后的目录结构:
最终的可运行文件jar文件并不包含依赖的jar包,和打包前src/main/resources/config中的配置文件, 所有依赖的jar包都放在和可运行文件jar文件平行的lib文件夹内,这样如果以后想快速部署,就不用每一次都把体积很大的lib包都要传一遍,除非依赖包有所变化,当然这些都是后续如果想这么做的前提,我这里还是为了使部署的文件比较规整
这里的pom.xml中的build配置文件如下:
<build>
<!--打包后的项目名称 -->
<finalName>com.springboot.example</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}\classes</targetPath>
<excludes>
<!-- 这里不能排除config/**,这里是myeclipse的编译环境,不是打包的,排出之后,
myeclipse中classpath下将找不到config,会报错
-->
<!-- <exclude>config/**</exclude> -->
</excludes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<!-- 这里必须包含.xml否则Mybatis的xml无法打包 -->
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 打jar包的插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<!-- 程序启动入口 -->
<mainClass>com.test.springboot.HelloApplication</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- not append assembly id in release file name -->
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<!-- 注意这里的路径 -->
<descriptor>src/main/build/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
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配置表示,排除哪些文件夹不被打包进去
package.xml的文件内容 :
重点的就是package.xml了,使用maven-assembly-plugin的相关配置实际上都在这个文件里面,注意路径:在myeclipse中 点击项目右击-->new-->source folder--然后输入src/main/build<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<!-- 改为false不会出现两层相同的目录 -->
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>bin</directory>
<outputDirectory>${file.separator}</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>${file.separator}</outputDirectory>
<excludes>
<exclude>static/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>${file.separator}</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<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>
</assembly>
这里面我配置了,最终压缩的文件格式,为zip,也就是最终打包出来的是一个zip的文件,然后发布到服务器上进行解压部署,相关我要的配置都在这个压缩包内,解压后使用命令后台启动: nohup java -jar xxx.jar >/dev/null&