编写⼀个简单的maven多模块项⽬的打包脚本
背景
Java 应⽤发布的时候,通常按某种⽬录结构组织部署包。为了避免每次发布的时候⼿动拷贝最新的 jar 包,可以利⽤ maven-assembly-plugin 插件,直接将⼯程打包成特定⽬录的 zip 包。
本⽂介绍⼀个简单的打包脚本,完成发布⼀个固定包的功能。
实现步骤
笔者为⼀个同时包含 modelA、modelB 两个独⽴应⽤的多模块项⽬,编写了⼀个打包模块,过程如下。
第⼀步,在⽗⼯程下创建⼀个 maven 项⽬的新模块,命名为 assembly ,删掉 src ⽬录。
第⼆步,在 assembly ⽬录下创建⼀个部署包⽬录,命名为 template ,它的结构类似 tomcat 发布包:
第三步,编写 l ⽂件,packaging 类型为 pom ,并添加 maven-assembly-plugin打包插件配置:
<artifactId>assembly</artifactId>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<finalName>XXX-Package</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor&l</descriptor>
</descriptors>
</configuration>
<dependencies>
</dependencies>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
第四步,在 assembly ⽬录下创建⼀个打包⽂件 l,在该⽂件中定义最终部署包的⽂件来源。这⾥将模块 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/assembly-1.1.3.xsd"> <id>full</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<!--将部署包⽬录模板添加到打包⽬录-->
<fileSets>
<fileSet>
<directory>${basedir}/template</directory>
<outputDirectory>XXX-Package</outputDirectory>
</fileSet>
</fileSets>
<!--将SpringBoot 打包⽣成的 jar 拷贝到⽬标⽂件夹的 lib -->
<files>
<file>
<source>${parent.basedir}/modelA/target/madelA.jar</source>
<outputDirectory>XXX-Package/lib</outputDirectory>
</file>
</files>
</assembly>
XXX-Package.zip ⽂件,就类似我们下载的 Tomcat 压缩包了。
bin ⽬录
bin ⽬录下通常是启动和停⽌脚本。
maven打包本地jar包
编写启动脚本 start.sh ,以后台进程且忽略掉输出、指定 Spring 配置⽂件路径的⽅式启动 SpringBoot 的可执⾏ jar 包:
#!/bin/sh
basePath=$(cd `dirname $0`; pwd)
echo "basepath is $basePath"
cd ../lib
nohup java -Xmx512m  -jar xx.jar --fig.additional-location=file:../conf/ >/dev/null 2>&1 &
停⽌脚本页⽐较简单,到对应的进程 kill 掉:
jarPid=`ps -ef|grep XXX.jar|grep -v "grep"|awk '{print $2}'`
if [ "$jarPid" != "" ]; then
kill -9 $jarPid
fi
打包过程
包含 assembly 的多个模块的打包顺序如下:
由于 assembly 的打包⽅式 pom ,所以它最后⼀个执⾏,可以保证拿到其他模块的 jar 。
这是个⽐较简单的应⽤,maven 的三个插件都对打包有不同的作⽤,下⼀章节将继续介绍打包插件的注意事项。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。