热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过Maven构建打包Springboot,并将config配置文件提取到jar文件外

如果通过不同的IDE打包,着实会觉得依赖性太大,并且容易出现错误,操作也比较复杂同时,spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行

如果通过不同的IDE打包,着实会觉得依赖性太大,并且容易出现错误,操作也比较复杂 

同时,spring-boot-maven-plugin的使用感觉,相关配置太少,并且无法满足方便部署和运行的需求。 


这里我们使用了,Maven的如下插件 下载 

maven-jar-plugin,负责将应用程序打包成可执行的jar文件 
maven-assembly-plugin,负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署 



需求1,将依赖的jar提取到可运行的jar文件之外,我们使用maven-jar-plugin来实现 

比如我的项目最终的打包目录如下 下载 
 
代码目录结构如下 
 

最终的可运行文件jar文件并不包含依赖的jar包,所有依赖的jar包都放在和ps.jar平行的lib文件夹内,这样如果以后想快速部署,就不用每一次都把体积很大的lib包都要传一遍,除非依赖包有所变化,当然这些都是后续如果想这么做的前提,我这里还是为了使部署的文件比较规整 
这里的maven-jar-plugin的配置文件如下 下载 

Xml代码  下载 

  1. <plugin>  

  2.                 <groupId>org.apache.maven.pluginsgroupId>  

  3.                 <artifactId>maven-jar-pluginartifactId>  

  4.                 <version>2.6version>  

  5.                 <configuration>  

  6.                     <archive>  

  7.                       

  8.   

  9.                         <manifest>  

  10.                             <mainClass>com.vmpay.pay.AppmainClass>  

  11.                               

  12.                     <appendAssemblyId>falseappendAssemblyId>  

  13.                     <descriptors>  

  14.                         <descriptor>src/main/build/package.xmldescriptor>  

  15.                     descriptors>  

  16.                 configuration>  

  17.                 <executions>  

  18.                     <execution>  

  19.                         <id>make-assemblyid>  

  20.                         <phase>packagephase>  

  21.                         <goals>  

  22.                             <goal>singlegoal>  

  23.                         goals>  

  24.                     execution>  

  25.                 executions>  

  26.             plugin>  



重点的就是package.xml的路径了,使用maven-assembly-plugin的相关配置实际上都在这个文件里面 
package.xml的文件内容 

Xml代码  下载 

  1. xml version="1.0" encoding="UTF-8"?>  

  2. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  3.   xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">  

  4.     <id>packageid>  

  5.     <formats>  

  6.         <format>zipformat>  

  7.     formats>  

  8.     <includeBaseDirectory>trueincludeBaseDirectory>  

  9.     <fileSets>  

  10.         <fileSet>  

  11.             <directory>bindirectory>  

  12.             <outputDirectory>/outputDirectory>  

  13.         fileSet>  

  14.         <fileSet>  

  15.             <directory>src/main/resourcesdirectory>  

  16.             <outputDirectory>/outputDirectory>  

  17.         fileSet>  

  18.         <fileSet>  

  19.             <directory>${project.build.directory}directory>  

  20.             <outputDirectory>/outputDirectory>  

  21.             <includes>  

  22.                 <include>*.jarinclude>  

  23.             includes>  

  24.         fileSet>  

  25.     fileSets>  

  26.     <dependencySets>  

  27.         <dependencySet>  

  28.             <outputDirectory>liboutputDirectory>  

  29.             <scope>runtimescope>  

  30.   

  31.             <excludes>  

  32.   

  33.                 <exclude>${groupId}:${artifactId}exclude>  

  34.             excludes>  

  35.         dependencySet>  

  36.     dependencySets>  

  37. assembly>  


其他相关配置可参看官方文档 下载 
[url] 
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_unpackOptions 
[/url] 

这里面我配置了,最终压缩的文件格式,为zip,也就是最终打包出来的是一个zip的文件,然后发布到服务器上进行解压部署,相关我要的配置都在这个压缩包内,解压即可直接使用 

下面的fileSets中配置了我需要将那些文件打包到我的最终压缩包中, 
我的配置文件包括了启动脚本bin文件夹,里面放着shell的启动脚本, 
相关的配置文件src/main/resources,里面放着整个程序提取的properties等相关的配置文件 
最终可运行的jar文件,使用了${project.build.directory}变量,也就是通过maven-jar-plugin生成的那个jar文件 
dependencySets里面配置了依赖库最终输出到lib文件夹下,与上面的maven-jar-plugin配置生成的manifest文件路径相对应,这样可运行jar就会按照manifest的路径来找相应的文件进行加载 


start.sh 

Shell代码  下载 

  1. ###启动  

  2.   

  3. #!/bin/sh  

  4.   

  5. moduleName="ps"  

  6. pidPath="/var/run/$moduleName-tpid"  

  7.   

  8. rm -f $pidPath  

  9.   

  10. nohup java -jar ./$moduleName.jar -server -Xms1024m -Xmx2048m -Xss256k > ./run.log 2>&1 &  

  11.   

  12. echo $! > $pidPath  


stop.sh 

Shell代码  下载 

  1. ###停止  

  2.   

  3. moduleName="ps"  

  4.   

  5. tpid=`cat /var/run/$moduleName-tpid | awk '{print $1}'`  

  6. tpid=`ps -aef | grep $tpid | awk '{print $2}' |grep $tpid`  

  7. if [ ${tpid} ]; then  

  8. kill -9 $tpid  

  9. fi  




推荐阅读
author-avatar
吃货程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有