作者:吃货程序猿 | 来源:互联网 | 2023-07-09 13:35
如果通过不同的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代码 下载
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<version>2.6version>
<configuration>
<archive>
<manifest>
<mainClass>com.vmpay.pay.AppmainClass>
<appendAssemblyId>falseappendAssemblyId>
<descriptors>
<descriptor>src/main/build/package.xmldescriptor>
descriptors>
configuration>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
重点的就是package.xml的路径了,使用maven-assembly-plugin的相关配置实际上都在这个文件里面
package.xml的文件内容
Xml代码 下载
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>packageid>
<formats>
<format>zipformat>
formats>
<includeBaseDirectory>trueincludeBaseDirectory>
<fileSets>
<fileSet>
<directory>bindirectory>
<outputDirectory>/outputDirectory>
fileSet>
<fileSet>
<directory>src/main/resourcesdirectory>
<outputDirectory>/outputDirectory>
fileSet>
<fileSet>
<directory>${project.build.directory}directory>
<outputDirectory>/outputDirectory>
<includes>
<include>*.jarinclude>
includes>
fileSet>
fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>liboutputDirectory>
<scope>runtimescope>
<excludes>
<exclude>${groupId}:${artifactId}exclude>
excludes>
dependencySet>
dependencySets>
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代码 下载
###启动
#!/bin/sh
moduleName="ps"
pidPath="/var/run/$moduleName-tpid"
rm -f $pidPath
nohup java -jar ./$moduleName.jar -server -Xms1024m -Xmx2048m -Xss256k > ./run.log 2>&1 &
echo $! > $pidPath
stop.sh
Shell代码 下载
###停止
moduleName="ps"
tpid=`cat /var/run/$moduleName-tpid | awk '{print $1}'`
tpid=`ps -aef | grep $tpid | awk '{print $2}' |grep $tpid`
if [ ${tpid} ]; then
kill -9 $tpid
fi