false </ unpack>
</ dependencySet>
</ dependencySets>
<!-配置文件打包进zip文件的配置目录->
<目录> $ {project.basedir} / src / main / profiles / $ {activeProfile} </ directory>
$ {package-name} - $ {activeProfile} / conf </ outputDirectory>
** / * </ include>
<!- *。xml </ include>->
<!- *。properties </ include>->
<!- *。yml </ include>->
</ includes>
</ fileSet>
<!-启动脚本打包进zip文件->
<目录> $ {project.basedir} / src / main / scripts </ directory>
</ outputDirectory>
** / * </ include>
</ includes>
<!-文件文件权限为777->
777 </ fileMode>
<!-目录权限为777->
777 </ directoryMode>
<!-脚本中参数变量为pom中的值关键->
true </ filtered>
</ fileSet>
<!-项目编译出来的jar打包进zip文件->
$ {project.build.directory} </ directory>
$ {package-name} - $ { activeProfile } / </ outputDirectory>
*。jar < / include>
</ includes>
</ fileSet>
</ fileSets>
</ assembly>
重点介绍:
-
格式:把配置文件和jar包等压缩成什么文件格式,这里可以有:zip,tar等
-
fileMode官员:指定脚本目录下脚本文件(这里是:shenniu_publish.sh)在linux上文件权限为777
-
已过滤的脚本:脚本中参数变量为pom的配置文件中属性的值(该配置,是把mvn中属性值映射生成到sh文件中,如:$ {package-name})
完成上面配置后,此时我们可以通过idea上切换切换不同环境来打zip包,如下:
分享shenniu_publish.sh程序启动工具
上面步骤完成了zip格式的发布包,我们再分享下启动程序的shell脚本,该脚本具有的功能如:
-
解压zip +启动jar包
-
启动jar包
-
停止对应jar运行
-
重启jar程序
目前该shell中封装了两种启动jar命令的方式:
-
java -cp
-
java -jar
如命令格式:
来看全部的shell代码:
#!/ usr / bin / env bash
#可变参数变量
languageType = “ javac” #支持java,javac,netcore发布
#参数值由pom文件传递
baseZipName = “” $ {package-name} - $ {activeProfile} “ #压缩包名称publish-test.zip的
packagename = “ $ {package-name} ” #命令启动包名xx.jar的xx
mainclass = “” $ {boot-main} “ #java -cp启动时,指定main入口类;命令:java -cp conf; lib \ *。jar; $ {packageName} .jar $ {mainclass}
#例子
#baseZipName =“ publish-test”#压缩包名称publish-test.zip的发布
#packageName =“ publish”。罐子的XX
#固定变量
基本路径= (光盘 ‘ 目录名称 (光盘 `目录名称 (光盘 ‘目录名称 0`/; pwd)
baseZipPath = “” $ {basePath} / $ {baseZipName} .zip“ #压缩包路径
baseDirPath = ”“ $ {basePath} ” #解压部署磁盘路径
pid = #进程pid
#解压
功能 shenniu_unzip()
{
echo “解压- --------------------------------------------“
echo ”压缩包路径:$ {baseZipPath} “
如果 [!find $ {baseZipPath}
]
然后
回显 “不存在压缩包:$ {baseZipPath} ”
else
echo “解压磁盘路径:$ {baseDirPath} /$ {baseZipName} “
echo ”开始解压…“
#解压命令
unzip -od $ {baseDirPath} / $ {baseZipName} $ {baseZipPath}
#设置执行权限
chmod + x $ {baseDirPath} / $ {baseZipName} / $ {packageName}
echo “解压完成。”
fi
}
#检测pid
function getPid()
{
echo “检测状态--------------------------- ------------------“
pid =ps -ef | grep -n $ {packageName} | grep -v grep | awk '{print $ 2}'
if [ $ {pid} ]
然后
回显 “运行pid:$ {pid} ”
else
echo “未运行”
fi
}
#启动程序
function start()
{
#启动前,先停止之前的
stop
if [ $ {pid} ]
then
echo “停止程序失败,无法启动“
else
echo ”启动程序-------------------------------------------- -“
#选择语言类型
read -p ”输入程序类型(java,javac,netcore),继续按回车键(要么:$ {languageType}):“ read_languageType
如果 [ $ {read_languageType} ]
则
languageType = $ { read_languageType}
fi
echo “选择程序类型:$ {languageType} ”
#进入运行包目录
cd $ {baseDirPath} / $ {baseZipName}
#分类启动
if [ “ $ {languageType} ” == “ javac” ]
则
if [ $ {mainclass} ]
然后
nohup java -cp conf:lib \ *。jar:$ {packageName} .jar $ {mainclass} > $ {baseDirPath} / $ {packageName} .out 2>&1&
#nohup java -cp conf:lib \ *的.jar:$ {的packageName}的.jar $ {mainclass}>的/ dev / null的2>&1&
音响
的elif [ “$ {languageType} “ == ” java“ ]
然后
nohup java -jar $ {baseDirPath} / $ {baseZipName} / $ {packageName} .jar> / dev / null 2>&1&
#java -jar $ {baseDirPath} / $ {baseZipName} / $ {packageName} .jar
elif [ “ $ {languageType} ” == “ netcore” ]
然后
#nohup dotnet运行$ {baseDirPath} / $ {baseZipName} / $ {packageName}> / dev / null 2 >&1&
nohup $ {baseDirPath} / $ {baseZipName} / $ {packageName} > / dev / null 2>&1&
fi
#查询是否有启动进度
getPid
如果 [ $ {PID} ]
然后
回声 “已启动”
#nohup日志
尾-n 50 -f $ {baseDirPath} / $ {的packageName} .OUT
别的
回声 “启动失败”
科幻
音响
}
#停止程序
功能 停止()
{
getPid
if [ $ {pid} ]
然后
回显 “停止程序------------------------------------- --------“
kill -9 $ {pid}
getPid
如果 [ $ {pid} ]
则
#stop
echo ”停止失败“
else
echo “停止成功”
fi
fi
}
#启动时带参数,根据参数执行
if [ $ {#} -ge 1]
然后
case $ {1} in
“ start”)
start
;;
“ restart”)
开始
;;
“ stop”)
停止
;;
“ unzip”)
#执行解压
shenniu_unzip
#执行启动
start
;;
*)
echo “ $ {1}无任何操作”
;;
command如下命令:
解压缩:解压并启动
start:启动
stop:停止进程
重启:重启
示例命令如:./ shenniu_publish start
“
fi
正如上面小节说的,shell中的参数软件包名称,activeProfile,boot-main都是由mvn中profiles的属性中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;其实在我们生成zip包的时候,shell中的参数就被替换了,可以看zip中shell文件内容如:
把生成的zip上传到linux上,通过命令解压:
1解压缩-od eureka-server-0.0.1-node eureka-server-0.0.1-node.zip
其实shell脚本中包含有解压命令,但是我在打包时放在了zip中,所以只能通过手动解压了,当然可以调整;然后进入压缩目录如此:
注:这里第一次执行./shenniu_publish.sh脚本时候,提示了错误信息;是由于我是在windows上编辑的这个脚本,其空间等和linux上不一样,所以运行会有问题,要解决可以使用vim命令在linux把该文件转成linux格式,如下命令:
1 vim shenniu_publish.sh
2 设置 ff = unix
3:wq
执行完后,再来运行脚本./shenniu_publish.sh,此时有如下提示:
此刻我们文件是解压状态,因此只需要启动命令启动程序即可:
到这里shenniu_publish.sh脚本使用就完成了,只要脚本没有提示错误,基本都能启动jar服务;其他重新启动和停止命令也如此执行就行:
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
28499cb7e318.png)
到这里shenniu_publish.sh脚本使用就完成了,只要脚本没有提示错误,基本都能启动jar服务;其他重新启动和停止命令也如此执行就行:
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
[外链图片转存中…(img-ACezK0XK-1714450930803)]
[外链图片转存中…(img-dzgtKx05-1714450930804)]
[外链图片转存中…(img-5lyRHuHA-1714450930804)]
[外链图片转存中…(img-WI2KevDb-1714450930805)]
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
[外链图片转存中…(img-q7fvrrXV-1714450930806)]
[外链图片转存中…(img-RE81R622-1714450930806)]