这里我们使用了,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&