使用mvn deploy:deploy-file 上传jar/pom至nexus私服

使用mvn deploy:deploy-file 上传jar/pom至nexus私服

背景

公司代码是在内网开发,之前使用的maven离线仓库分散在不同的开发机器上,版本难以维护。后采用sonatype OSS 做maven nexus,搭建内网私服。

采坑过程

经验之谈

由于在内网开发,不便于直接联网下载,需要将原maven离线仓库中jar/pom上传至nexus。

  1. 上传jar文件
mvn deploy:deploy-file -Dfile=<file> -DrepositoryId=<repositoryId> -Durl=<url> -DpomFile=<pomFile> -Dpackaging=jar
# 此处-Dfile=<file> 为jar文件

此处需要额外注意 -DpomFile=<pomFile> ,如果不指定则需要手动指定groupId、artifactId、version,生成的pom文件中也只包含指定内容,极大可能造成dependencies、parent等关系丢失。

  1. 上传pom文件
mvn deploy:deploy-file -Dfile=<file> -DrepositoryId=<repositoryId> -Durl=<url> -DpomFile=<pomFile> -Dpackaging=pom
# 此处-Dfile=<file> 为pom文件

问题排查

Cannot deploy artifact from the local repository:/path/to/your/loca/repository/jar

如果mvn deploy的jar文件已经在本地maven库中,可能会报告上述错误,将对应上传的jar/pom文件复制到临时目录中,以临时目录中的文件执行即可。

脚本

附上shell脚本,方便批量处理

#!/bin/bash

pom_path=$1
# 设置mvn执行时占用的内存大小,内存充足不设定也没问题
export MAVEN_OPTS="-Xms32M -Xmx32M"
# 改为自己的maven nexus地址
NEXUS_URL="xxxxxxx"
REPOSITORY_ID="your nexus repository id"

POMS="poms.txt"
find $pom_path -name "*.pom" | sort > $POMS || exit 1
for pom in `cat $POMS`
do
    # 复制pom文件到当前目录
    \cp $pom .
    pom_file_name=$(echo "$pom" | awk -F "/" '{print $NF}')
    # 将pom文件后缀换成.jar找到对应的jar文件(此处根据约定pom/jar文件只是后缀不同来进行推测)
    jar=${pom%".pom"}".jar"
    # 如果jar文件存在,则将其复制到当前目录
    if [ -f $jar ]; then
        \cp $jar .
        jar_file_name=$(echo "$jar" | awk -F "/" '{print $NF}')
        # 部署jar文件,附带自身提供的pom文件
        mvn deploy:deploy-file -Dfile=$jar_file_name -Durl=$NEXUS_URL -DrepositoryId=$REPOSITORY_ID -DpomFile=$pom_file_name -Dpackaging=jar
    else
        # 只部署pom文件
        mvn deploy:deploy-file -Dfile=$pom_file_name -Durl=$NEXUS_URL -DrepositoryId=$REPOSITORY_ID -DpomFile=$pom_file_name -Dpackaging=pom
    fi
    # 清理复制的临时jar和pom文件
    \rm -rf ./$pom_file_name ./$jar_file_name
done
# 清理POM列表文件
\rm -rf $POMS

参考

感谢这篇帖子给的启发,遇到问题先去官网查文档。

https://blog.csdn.net/andyzhaojianhui/article/details/82785934

maven deploy参数
maven deploy用法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章