repositories与distributionManagement
它们的作用方向是完全相反的:
- <repositories>:负责 “拉取”(下载)。告诉 Maven 去哪里下载 项目所需的依赖包。
- <distributionManagement>:负责 “推送”(上传)。告诉 Maven 去哪里发布 项目构建好的 Jar/War 包。
<repositories>:依赖下载配置
当项目需要引用第三方库(比如 spring-boot-starter 或 mysql-connector)时,Maven 默认会去中央仓库(Maven Central)下载。如果你的公司有自己的私有仓库(如 Nexus、Artifactory),或者使用了阿里云镜像,就需要配置这个标签。
- 作用:定义 Maven 构建项目时,去哪里寻找和下载依赖构件。
- 常见场景:
- 下载公司内部开发的公共组件。
- 下载不在 Maven 中央仓库的开源库。
关键子标签:
- <id>:仓库的唯一标识。
- <url>:仓库的地址。
- <releases> / <snapshots>:控制是否允许下载正式版或快照版依赖。
<repositories>
<repository>
<id>aliyun-public</id>
<name>Aliyun Public Repository</name>
<!-- 告诉 Maven:缺包了去这里找 -->
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<distributionManagement>:构件发布配置
当开发完一个项目(比如一个通用的工具类库),执行 mvn deploy 命令时,Maven 需要知道把这个生成的 Jar 包上传到哪里,以便其他同事或其他项目使用。
- 作用:指定 Maven 将项目构建的构件(Jar/War/Pom)部署到哪个远程仓库。
- 常见场景:
- 发布公司内部的基础组件库到私有仓库。
- 发布正式版本到 Release 仓库,开发版本到 Snapshot 仓库。
- 关键子标签:
<repository>:正式版仓库配置(用于发布 1.0.0 这种稳定版本)。<snapshotRepository>:快照版仓库配置(用于发布 1.0.0-SNAPSHOT 这种开发中版本)。
<distributionManagement>
<!-- 正式发布版去这里 -->
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<!-- 告诉 Maven:打包发布时,稳定版传到这里 -->
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<!-- 开发快照版去这里 -->
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<!-- 告诉 Maven:打包发布时,快照版传到这里 -->
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
重要注意事项
- 认证信息不要写在 pom.xml 里
<repositories> 和 <distributionManagement> 中通常只配置 <id> 和 <url>。千万不要把用户名和密码明文写在这里,因为 pom.xml 通常会被提交到 Git 仓库,会导致密码泄露。
正确做法:
在 pom.xml 中定义 <id>,然后在本地 Maven 配置目录下的 settings.xml 中配置 <servers> 认证信息,确保 <id> 一致。