[Maven]maven-dependency-plugin的奇怪用法
场景
新同学:我的项目拉不到依赖
老油条:我本地没问题啊
新同学:那把的本地Maven仓库发我
老油条:面临问题:
①压缩文件大小2G,微信、邮件都发送不了
②隔空投送……只有Apple设备可以用
③云盘?安全问题
最小依赖思路
从本地仓库找出当前项目需要的所有依赖,放到一个新的文件目录下,打包后的文件可以到百兆级别,走内部网络工具传送。
Maven插件
mvn dependency:copy-dependencies -DoutputDirectory=/min_maven_repo
将项目依赖的jar输出到指定目录:/min_maven_repo
问题:没有本地仓库jar的文件层级关系
先得到jar的全路径,然后复制到新目录
mvn dependency:3.6.1:list -DoutputAbsoluteArtifactFilename=true
得到如下文本
[INFO] --- dependency:3.6.1:list (default-cli) @ project ---
[INFO]
[INFO] The following files have been resolved:
[INFO] org.springframework:spring-core:jar:5.3.5:compile:/mvn/repo/org/springframework/spring-core/5.3.5/spring-core-5.3.5.jar
[INFO] org.springframework:spring-jcl:jar:5.3.5:compile:/mvn/repo/org/springframework/spring-jcl/5.3.5/spring-jcl-5.3.5.jar
[INFO] org.springframework:spring-beans:jar:5.3.5:compile:/mvn/repo/org/springframework/spring-beans/5.3.5/spring-beans-5.3.5.jar
从中截取jar的全路径,拷贝到新的文件即可(shell脚本)
#!/bin/bash
# 指定 Maven 本地仓库路径
maven_repo='/mvn/repo'
maven_repo_target='/mvn/mfm_repo'
maven_config_settings='/apache-maven/conf/project/settings.xml'
# 使用 mvn 命令在 Maven 本地仓库中查找所有的依赖,并打印出其全路径
echo "step1:maven依赖解析#######"
mvn mvn dependency:3.6.1:list -DoutputAbsoluteArtifactFilename=true --settings $maven_config_settings | grep -o "$maven_repo.*\(\.jar\|\.xml\)" > 1dependencyList.txt
echo "step2:依赖在本地仓库路径解析#######"
awk -v FS="$maven_repo" '{print $2}' 1dependencyList.txt > 2jarPaths.txt
echo "step3:需要拷贝的jar目录解析#######"
`rm -f 3jarDirnames.txt`
for jarPath in `cat 2jarPaths.txt`
do
echo $maven_repo
dirnameCmd="dirname $maven_repo$jarPath >> 3jarDirnames.txt"
echo "$dirnameCmd"
eval "$dirnameCmd"
done
echo "step4:jar目录拷贝#######"
awk -F"$maven_repo" '{print $2}' 3jarDirnames.txt > 4dirnamePaths.txt
for dirnamePath in `cat 4dirnamePaths.txt`
do
mkdirCmd="mkdir -p $maven_repo_target$dirnamePath"
echo "$mkdirCmd"
eval "$mkdirCmd"
rmCmd="rm -r $maven_repo_target$dirnamePath"
echo "$rmCmd"
eval "$rmCmd"
cpCmd="cp -r $maven_repo$dirnamePath $maven_repo_target$dirnamePath"
echo "$cpCmd"
eval "$cpCmd"
done
老油条:接文件……