21 </ profile>
22
23 node2 </ id>
24
25 node2 </ activeProfile>
26 <程序包名称> $ { scripts_packageName} </ package-name>
27 $ {scripts_bootMain} </ boot-main>
28 </ properties>
29 </ profile>
30 </ profiles>
官员粗解:
id:用来指定不同环境配置文件所在的目录,如下我这里:
属性:该例程中的例程是可作为参数传递给其他配置文件,如我这里的package-name例程值就可以在另外的assembly.xml或者shell脚本文件中通过$ {package-name}获取到,如下:
activeByDefault:指定预设环境配置文件夹
maven-assembly-plugin打发布压缩包
对于springboot程序打包,可以分为jar和war,这里是jar包;有场景是咋们配置文件或者第三方等依赖包不想放到工程jar中,并且把这些文件压缩成一个zip包,方便上传到linux;此时通过maven-assembly-plugin和maven-jar-plugin就可以做到,mvn的配置如:
1
2 org.apache.maven.plugins </ groupId>
3 maven-jar-plugin </ artifactId>
4 2.6 </ version>
5
6
7 假</ addMavenDescriptor>
8
9 真</ addClasspath>
10 lib / </ classpathPrefix>
11 $ {scripts_bootMain} </ mainClass>
12 </ manifest>
13 < / archive>
14 <!-打包排除项->
15
16 ** / *。yml </ exclude>
17 ** / *。属性</ exclude>
18 ** / *。xml </ exclude>
19 ** / *。sh </ exclude>
20 </ excludes>
21 </ configuration>
22
23
24 make -a -jar </ id>
25 compile </ phase>
26
27 jar < / goal>
28 </ goals>
29 </ execution>
30 </ executions>
31 </ plugin>
32
33
34 org.apache.maven.plugins </ groupId>
35 maven-assembly -plugin </ artifactId>
36 2.4 </ version>
37 <!-插件的配置->
38
39 <!-指定程序集插件的配置文件->
40 <描述符>
41 <描述符> $ {project.basedir}/src/main/assembly/assembly.xml </ descriptor>
42 </ descriptors>
43 </ configuration>
44
45
46 make-assembly </ id>
47 包</阶段>
48 <目标>
49 <目标>单个</目标>
50 </目标>
51 </执行>
52 </执行>
53 </插件>
如下的地方如下几点:
-
mainClass代理:用于指定启动main函数入口类路径,如此处的:com.sm.EurekaServerApplication
-
不包括摘要:排除主罐包中配置等一些列后缀文件,因为我们要包这些配置文件放到主包外面
-
描述符描述符:用于指定程序集插件对应的assembly.xml配置文件
有了上面的mvn配置,我们还需要Assembly.xml的配置,这里提取了结合shell脚本发布程序的配置:
<assembly xmlns = “ http://maven.apache.org/ASSEMBLY/2.0.0” xmlns:xsi = “ http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation = “” http:// /maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd
http://maven.apache.org/ASSEMBLY/2.0.0“ >
$ {activeProfile} </ id>
<!-打包成一个用于发布的zip文件->
zip </ format>
</ formats>
<!- true:zip中生成一级目录(此处屏蔽,配合脚本需要profiles后缀)->
false </ includeBaseDirectory>
<!-打包进来的zip文件的lib目录->
假</ useProjectArtifact>
$ {package-name} - $ {activeProfile} / lib </ outputDirectory>
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
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
713294772210)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
[外链图片转存中…(img-zBUNEhbP-1713294772210)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!