编写一个简单的 maven 多模块项目的打包脚本
Posted 毕小宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个简单的 maven 多模块项目的打包脚本相关的知识,希望对你有一定的参考价值。
背景
Java 应用发布的时候,通常按某种目录结构组织部署包。为了避免每次发布的时候手动拷贝最新的 jar 包,可以利用 maven-assembly-plugin
插件,直接将工程打包成特定目录的 zip 包。
本文介绍一个简单的打包脚本,完成发布一个固定包的功能。
实现步骤
笔者为一个同时包含 modelA
、modelB
两个独立应用的多模块项目,编写了一个打包模块,过程如下。
第一步,在父工程下创建一个 maven 项目的新模块,命名为 assembly
,删掉 src 目录。
第二步,在 assembly
目录下创建一个部署包目录,命名为 template
,它的结构类似 tomcat 发布包:
第三步,编写 pom.xml
文件,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>assembly.xml</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
目录下创建一个打包文件 assembly.xml
,在该文件中定义最终部署包的文件来源。这里将模块 A 的可执行 jar 包打入到 lib 目录下,示例脚本如下:
<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>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>
pom.xml 中的配置 finalName
是最终打包文件名称,执行该打包脚本后生成一个
XXX-Package.zip
文件,就类似我们下载的 Tomcat 压缩包了。
bin 目录
bin 目录下通常是启动和停止脚本。
编写启动脚本 start.sh
,以后台进程且忽略掉输出、指定 Spring 配置文件路径的方式启动 SpringBoot 的可执行 jar 包:
#!/bin/sh
basePath=$(cd `dirname $0`; pwd)
echo "basepath is $basePath"
cd ../lib
nohup java -Xmx512m -jar xx.jar --spring.config.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 的三个插件都对打包有不同的作用,下一章节将继续介绍打包插件的注意事项。
以上是关于编写一个简单的 maven 多模块项目的打包脚本的主要内容,如果未能解决你的问题,请参考以下文章
记Spring搭建功能完整的个人博客「Oyster」全过程[其二] Idea中Maven+SpringBoot多模块项目开发的设计和各种坑(模块间依赖和打包问题)