maven deploy distributionManagement

本文介绍如何使用Maven将项目构件部署到本地及远程仓库。包括配置POM文件以指定仓库位置,通过settings.xml配置认证信息,以及如何区分处理release版与snapshot版构件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分发构件至远程仓库
mvn install 会将项目生成的构件安装到本地Maven仓库, mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
我们需要配置POM的distributionManagement来指定Maven分发构件的位置,如下:
Xml代码 
  1. <project>    
  2.   ...    
  3.   <distributionManagement>    
  4.     <repository>    
  5.       <id>nexus-releases</id>    
  6.       <name>Nexus Release Repository</name>    
  7.       <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>    
  8.     </repository>    
  9.     <snapshotRepository>    
  10.       <id>nexus-snapshots</id>    
  11.       <name>Nexus Snapshot Repository</name>    
  12.       <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>    
  13.     </snapshotRepository>    
  14.   </distributionManagement>    
  15.   ...    
  16. </project>    
Maven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定。Maven会根据你项目的版本来判断将构件分发到哪个仓库。
一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:
Xml代码 
  1. <settings>    
  2.   ...    
  3.   <servers>    
  4.     <server>    
  5.       <id>nexus-releases</id>    
  6.       <username>admin</username>    
  7.       <password>admin123</password>    
  8.     </server>    
  9.     <server>    
  10.       <id>nexus-snapshots</id>    
  11.       <username>admin</username>    
  12.       <password>admin123</password>    
  13.     </server>      
  14.   </servers>    
  15.   ...    
  16. </settings>  
需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。
 

使用maven可以方便的开发好的jar包发布到本地仓库中,方便其他项目依赖使用,在pom.xml文件中添加如下的配置:

    <distributionManagement>
        <repository>
            <id>localRepository</id>
            <url>file:D:/Workspace/Repository</url>
        </repository>
    </distributionManagement>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后再命令行中输入 * mvn deploy * 即可发布url所指定的本地目录中。

参考:https://my.oschina.net/xiaokaceng/blog/169530


小结

本文介绍了Maven仓库,它是什么?本地仓库,远程仓库,中央仓库具体是指什么?并介绍了如何在POM中配置项目层次的仓库,在settings中配置用户层次的仓库,以及mirror。本文还介绍了如何安装构件到本地仓库,如何分发构件至仓库。

如果这里不配置,会报错:  报 错:Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project git-demo: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter
### Maven 中 `distributionManagement` 的配置及使用 #### 什么是 `distributionManagement` `<distributionManagement>` 是 Maven POM 文件中的一个重要部分,用于定义如何以及在哪里部署构建生成的构件。通过 `<distributionManagement>` 配置,可以指定项目构件的目标存储库位置,无论是本地还是远程仓库。 当执行 `mvn deploy` 命令时,Maven 将依据此配置将项目的构件分发到指定的远程仓库中[^3]。 --- #### 配置结构 以下是 `<distributionManagement>` 的典型配置: ```xml <project> ... <distributionManagement> <!-- 发布 release 版本 --> <repository> <id>releases-repo</id> <name>Releases Repository</name> <url>http://your-nexus-server/repository/releases/</url> </repository> <!-- 发布 snapshot 版本 --> <snapshotRepository> <id>snapshots-repo</id> <name>Snapshots Repository</name> <url>http://your-nexus-server/repository/snapshots/</url> </snapshotRepository> </distributionManagement> ... </project> ``` - **`<repository>`**: 定义了正式发布的版本 (release) 构件应该被部署的位置。 - **`<snapshotRepository>`**: 定义了开发阶段的快照版本 (snapshot) 构件应该被部署的位置。 - **`<id>`**: 表示服务器的身份标识符,需与 `settings.xml` 文件中的认证信息匹配[^4]。 - **`<url>`**: 指定目标仓库的具体地址。 --- #### 认证设置 为了能够成功连接至远程仓库并完成构件的上传操作,通常需要在用户的 `$HOME/.m2/settings.xml` 文件中提供相应的认证信息。例如: ```xml <servers> <server> <id>releases-repo</id> <username>admin</username> <password>password123</password> </server> <server> <id>snapshots-repo</id> <username>admin</username> <password>password123</password> </server> </servers> ``` 上述配置中的 `<id>` 必须与 `<distributionManagement>` 中的 `<id>` 对应,以便 Maven 能够找到正确的用户名和密码来验证身份。 --- #### SNAPSHOT 和 RELEASE 区别 如果项目版本号中含有 `-SNAPSHOT` 字样,则表明该项目正处于开发状态,每次构建都会生成一个新的时间戳版本;而无 `-SNAPSHOT` 后缀的版本被认为是稳定版 (RELEASE),其内容不会随时间变化[^5]。 因此,在实际应用中,通常会分别为 SNAPSHOT 和 RELEASE 类型的构件配置不同的存储库路径。 --- #### 实际案例分析 假设我们正在使用 Nexus 私服作为远程仓库,并希望实现以下功能: 1. 将 Release 版本发布到 `/repository/releases/`; 2. 将 Snapshot 版本发布到 `/repository/snapshots/`。 POM 文件可按如下方式配置: ```xml <distributionManagement> <repository> <id>nexus-release</id> <name>Nexus Releases</name> <url>http://localhost:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshot</id> <name>Nexus Snapshots</name> <url>http://localhost:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement> ``` 与此同时,确保 `settings.xml` 文件已正确配置对应的认证信息。 --- #### 总结 通过合理配置 `<distributionManagement>` 及相关认证信息,开发者可以轻松地将 Maven 项目构件部署到指定的远程仓库中。这对于团队协作、持续集成以及依赖管理具有重要意义。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值