痛点:
fs-uas-act,fs-uas-job,fs-uas-mng,fs-uas-top,fs-uas-uap这五个服务在自己的Lib目录下分为三个目录,分别是kuas_lib/koca_lib/other_lib,other_lib是间接依赖的三方依赖,量比较大,总体大小为160M左右,现在5个服务就有5个other_lib,会有很多重复的三方依赖,导致制作的交付件比较大,在1.2G左右。
优化思路:
把三方间接依赖包other_lib放到一个指定的公共目录common,common放5个服务间接三方依赖合集,服务启动时根据每个服务根据三方依赖清单从common中拷贝需要的依赖到自己的lib/other_lib目录下。这种方案最后的交付件大小在565M,总体来说减少了600多M。
改造流程
1、修改fs-uas-act,fs-uas-job,fs-uas-mng,fs-uas-top,fs-uas-uap的pom.xml,如下图
2、生成三方依赖清单
添加执行器:
<execution>
<id>list-dependencies</id>
<phase>package</phase>
<goals>
<goal>list</goal>
</goals>
<configuration>
<excludeGroupIds>
com.szkingdom.kuas,
com.szkingdom.koca,
com.szkingdom.fs
</excludeGroupIds>
<outputFile>${project.build.directory}/dependencies.list</outputFile>
<includeScope>runtime</includeScope>
</configuration>
</execution>
三方依赖清单会在target目录下如图:
3、在打包时需要把dependencies.list拷贝到同级目录fs-uas-act中
在assembly.xml添加如下内容
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>./</outputDirectory>
<includes>
<include>dependencies.list</include>
</includes>
</fileSet>
4、在bin目录中添加脚本,在服务启动前需要进行三方依赖拷贝,按照三方依赖清单,把三方依赖从common目录拷贝到服务的lib/other_lib目录下。
#!/bin/bash
# 假设common目录与当前脚本同级
COMMON_DIR="../../common"
OTHER_LIB_DIR="../lib/other_lib"
# 确保目标目录存在
mkdir -p "$OTHER_LIB_DIR"
while IFS=: read -r group artifact jar version _; do
# 检查groupId和artifactId是否都存在
if [ -n "$group" ] && [ -n "$artifact" ]; then
jar_file="${artifact}-${version}.jar"
echo ${jar_file}
# 构建完整的源文件路径
source_path="${COMMON_DIR}/${jar_file}"
# 检查源文件是否存在,然后拷贝
if [ -f "$source_path" ]; then
cp "$source_path" "$OTHER_LIB_DIR"
echo "Copied ${jar_file} to other_lib directory."
else
echo "File ${source_path} not found, skipping copy."
fi
fi
done < ../dependencies.list
5、最后交付件的目录结构:
6、部署
在部署的时候需要先执行copyotherlib.sh,然后再执行startup.sh
最后交付件的大小