maven私有仓库配置
了解 Maven 中 settings.xml
和 pom.xml
配置私有仓库的方法及其优先级非常重要。简单来说,settings.xml
中的镜像 (<mirrors>
) 配置优先级最高,它会覆盖其他仓库配置。下面这个表格汇总了主要的配置方式、位置及其特点,帮你快速掌握:
配置方式 | 配置文件 | 主要特点与用途 | 优先级 (从高到低) |
---|---|---|---|
<mirrors> | settings.xml | 优先级最高。用于为其他仓库配置镜像(替代URL),通常指向公司私服 。 | 最高 (覆盖其他所有仓库的原始URL) |
<profiles> 中的仓库 | settings.xml | 定义全局仓库列表,可供所有项目使用。需通过 <activeProfiles> 激活 。 | 较高 |
<repositories> | pom.xml | 定义项目级别的仓库,通常用于添加第三方特定仓库 。 | 较低 |
中央仓库 | Super POM | Maven 自带的默认仓库 。 | 最低 (作为保底) |
🧩 配置方法与示例
1. 在 settings.xml
中配置私有仓库
settings.xml
中的配置通常适用于所有项目,是全局性的。
- •
使用
<mirrors>
(最常用且优先级最高)
镜像会替代原始仓库的 URL。例如,配置一个镜像所有仓库(<mirrorOf>*</mirrorOf>
)的私有仓库:<settings><mirrors><mirror><id>my-company-mirror</id><name>My Company Mirror</name><url>http://nexus.mycompany.com:8081/repository/maven-public/</url><mirrorOf>*</mirrorOf> <!-- 匹配所有仓库 --></mirror></mirrors> </settings>s>
:mirrorOf
的其他常见值- •
central
: 仅镜像中央仓库。 - •
external:*
: 匹配所有非本地文件系统仓库。 - •
repo1,repo2
: 匹配特定 ID 的仓库。 - •
*,!repo1
: 匹配除repo1
外的所有仓库。
- •
- •
使用
<profiles>
和<activeProfiles>
这种方式是添加仓库到 Maven 的仓库列表,而不是替换。<settings><profiles><profile><id>my-company-profile</id><repositories><repository><id>my-company-repo</id><name>My Company Repository</name><url>http://nexus.mycompany.com:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></releases></repository></repositories></profile></profiles><activeProfiles><activeProfile>my-company-profile</activeProfile> <!-- 激活该 profile --></activeProfiles> </settings>
- •
配置认证信息 (
<servers>
)
如果私有仓库需要用户名和密码,必须在settings.xml
的<servers>
中配置,且<server>
的id
必须与仓库或镜像的id
匹配。<settings><servers><server><id>my-company-repo</id> <!-- 与仓库或镜像的 id 保持一致 --><username>your-username</username><password>your-password</password> <!-- 建议使用加密后的密码 --></server></servers> </settings>
2. 在 pom.xml
中配置私有仓库
pom.xml
中的配置通常只对当前项目或其子模块有效。
- •使用
<repositories>
<project>...<repositories><repository><id>my-company-repo</id><name>My Company Repository</name><url>http://nexus.mycompany.com:8081/repository/maven-public/</url></repository></repositories>... </project>
⚖️ 优先级规则总结
Maven 在解析依赖时,查找仓库的顺序和优先级非常重要
:
- 1.本地仓库 (
~/.m2/repository
):总是最先查找。 - 2.远程仓库列表(按优先级从高到低构建):
- •
pom.xml
中直接定义的<repositories>
。 - •
settings.xml
中激活的<profile>
内定义的仓库。 - •Super POM 中定义的中央仓库 (https://repo.maven.apache.org/maven2/)。
- •
- 3.镜像规则应用:对于上述列表中的每一个仓库,Maven 都会检查
settings.xml
中的<mirrors>
配置。一旦找到匹配的镜像,就会使用镜像的 URL 完全替代原始仓库的 URL。这是优先级最高的覆盖规则 。
💡 实用建议
- •企业常见实践:在公司的
settings.xml
中配置一个<mirrorOf>*</mirrorOf>
的镜像,指向内部的 Nexus 或 Artifactory 私服,并配置相应的认证信息。这样所有项目的依赖请求都会通过私服,无需在每个项目的pom.xml
中单独配置 。 - •查看生效配置:如果不确定最终生效的仓库配置,可以运行以下命令查看:
mvn help:effective-settings # 查看生效的 settings 配置 mvn help:effective-pom # 查看生效的 POM 配置(合并了所有父POM) mvn dependency:resolve # 解析并显示依赖的实际获取位置
- •认证信息安全:
settings.xml
中的密码建议使用 Maven 的加密功能 (mvn --encrypt-password
) 进行加密 。
希望这些信息能帮助你更好地理解和管理 Maven 仓库配置!