2023年12月13日发(作者:)

编写一个简单的maven多模块项目的打包脚本

背景

Java 应用发布的时候,通常按某种目录结构组织部署包。为了避免每次发布的时候手动拷贝最新的 jar 包,可以利用

maven-assembly-

plugin

插件,直接将工程打包成特定目录的 zip 包。

本文介绍一个简单的打包脚本,完成发布一个固定包的功能。

实现步骤

笔者为一个同时包含

modelA

modelB

两个独立应用的多模块项目,编写了一个打包模块,过程如下。

第一步,在父工程下创建一个 maven 项目的新模块,命名为

assembly

,删掉 src 目录。

第二步,在

assembly

目录下创建一个部署包目录,命名为

template

,它的结构类似 tomcat 发布包:

第三步,编写

文件,

packaging

类型为

pom

,并添加

maven-assembly-plugin

打包插件配置:

assembly

pom

maven-assembly-plugin

2.6

XXX-Package

false

make-assembly

package

single

第四步,在

assembly

目录下创建一个打包文件

,在该文件中定义最终部署包的文件来源。这里将模块 A 的可执行 jar 包打

入到 lib 目录下,示例脚本如下:

xmlns="/plugins/maven-assembly-plugin/assembly/1.1.3"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/plugins/maven-assembly-plugin/assembly/1.1.3 /xsd/">

full

zip

false

${basedir}/template

XXX-Package

${r}/modelA/target/

XXX-Package/lib

中的配置

finalName

是最终打包文件名称,执行该打包脚本后生成一个

文件,就类似我们下载的 Tomcat 压缩包了。

bin 目录

bin 目录下通常是启动和停止脚本。

编写启动脚本

,以后台进程且忽略掉输出、指定 Spring 配置文件路径的方式启动 SpringBoot 的可执行 jar 包:

#!/bin/sh

basePath=$(cd `dirname $0`; pwd)

echo "basepath is $basePath"

cd ../lib

nohup java -Xmx512m -jar --onal-location=file:../conf/ >/dev/null 2>&1 &

停止脚本页比较简单,找到对应的进程 kill 掉:

jarPid=`ps -ef|grep |grep -v "grep"|awk '{print $2}'`

if [ "$jarPid" != "" ]; then

kill -9 $jarPid

fi

打包过程

包含

assembly

的多个模块的打包顺序如下:

由于

assembly

的打包方式

pom

,所以它最后一个执行,可以保证拿到其他模块的 jar 。启示录

这是个比较简单的应用,maven 的三个插件都对打包有不同的作用,下一章节将继续介绍打包插件的注意事项。