如何使用Maven Deploy插件创建符号链接指向最新部署制品
实现方案
你遇到的时间戳后缀是Maven对SNAPSHOT版本的默认处理机制,要实现固定地址下载最新版本,可根据你的场景选择以下方案:
方案1:仓库服务端配置(最推荐)
主流私有Maven仓库(Nexus、Artifactory、Archiva)都原生支持该能力,无需修改本地部署逻辑:
- Nexus:进入对应仓库配置页,开启「Allow Redeploy」部署策略后,服务端会自动生成指向最新SNAPSHOT构件的固定别名地址,你可以自定义别名规则匹配
my_file_latest.zip的路径要求。 - Artifactory:直接使用
LATEST关键字替代地址中的版本号即可,地址格式为https://some_server/<groupId路径>/my_file/LATEST/my_file-LATEST.zip,服务端会自动转发到最新上传的构件。
该方案无需重复上传文件,不会占用额外存储空间,是优先级最高的选择。
方案2:本地二次部署固定版本包
如果没有仓库服务端的配置权限,可以在原有部署命令执行完成后,追加一条部署命令,将同一个zip包以latest作为版本号重新部署:
# 原有部署SNAPSHOT版本的命令 mvn -B deploy:deploy-file -DpomFile=pom.xml -Dpackaging=zip -Dfile=my_file.zip -Durl="https://some_server" -DrepositoryId="some_id" # 追加的部署latest版本的命令 mvn -B deploy:deploy-file -DgroupId=<实际的groupId> -DartifactId=my_file -Dversion=latest -Dpackaging=zip -Dfile=my_file.zip -Durl="https://some_server" -DrepositoryId="some_id"
部署完成后即可通过https://some_server/<groupId路径>/my_file/latest/my_file-latest.zip下载最新版本。如果需要直接使用根路径的https://some_server/my_file_latest.zip,可以将第二条命令的artifactId设置为my_file_latest,省略version参数即可。
方案3:使用wagon插件直接上传指定文件
如果不需要生成多余的Maven元数据,可以用wagon-maven-plugin直接将本地文件上传到服务器指定路径:
- 首先在pom.xml中添加插件配置:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>2.0.2</version> <configuration> <serverId>some_id</serverId> <url>https://some_server</url> </configuration> </plugin> </plugins> </build>
- 原有deploy命令执行完成后,执行以下命令上传固定名称的包:
mvn wagon:upload-single -Dwagon.fromFile=my_file.zip -Dwagon.toFile=my_file_latest.zip
该方式不会生成多余的版本目录和元数据,完全匹配你需要的wget https://some_server/my_file_latest.zip下载需求。
注意:如果你的仓库开启了部署版本不可修改的策略,方案2和方案3需要给对应账号开通覆盖上传的权限,否则latest包会上传失败。
内容的提问来源于stack exchange,提问作者user7665394
相关产品推荐
相关产品推荐

