maven settings.xml配置详解
我们直接来个示例,然后逐步介绍每一部分的配置:
以下是一个按环境区分(dev/test/release)的 settings.xml 示例,适合将构建产物分别部署到三个不同环境的私有仓库
settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 镜像加速(不影响私有仓库) -->
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central,jcenter,!szsh-dev,!szsh-test,!szsh-release</mirrorOf>
<name>aliyun-public</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!-- 仓库认证信息 -->
<servers>
<server>
<id>szsh-dev</id>
<username>你的dev用户名</username>
<password>你的dev密码</password>
</server>
<server>
<id>szsh-test</id>
<username>你的test用户名</username>
<password>你的test密码</password>
</server>
<server>
<id>szsh-release</id>
<username>你的release用户名</username>
<password>你的release密码</password>
</server>
</servers>
<!-- 按环境配置部署地址 -->
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<altSnapshotDeploymentRepository>
szsh-dev::default::https://packages.aliyun.com/your-path/maven/szsh-dev # 最前面的szsh-dev要和上面server中的id保持一致,表示用相应的认证信息
</altSnapshotDeploymentRepository>
</properties>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<altSnapshotDeploymentRepository>
szsh-test::default::https://packages.aliyun.com/your-path/maven/szsh-test
</altSnapshotDeploymentRepository>
</properties>
</profile>
<!-- 生产环境 -->
<profile>
<id>release</id>
<properties>
<altReleaseDeploymentRepository>
szsh-release::default::https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-release
</altReleaseDeploymentRepository>
</properties>
</profile>
</profiles>
<!-- 默认启用哪个环境(可以为空) -->
<activeProfiles>
<!-- <activeProfile>dev</activeProfile> -->
</activeProfiles>
</settings>
使用方法:
| 环境 | 命令 | 说明 |
|---|---|---|
| dev | mvn clean deploy -Pdev |
发布 SNAPSHOT 到 dev 仓库 |
| test | mvn clean deploy -Ptest |
发布 SNAPSHOT 到 test 仓库 |
| release | mvn clean deploy -Prelease |
发布 release 到生产仓库 |
注意:发布 snapshot 版本的前提是 pom.xml 中版本后缀为 -SNAPSHOT,否则不会触发 snapshot 部署逻辑。
下面是带认证信息的完整简化 settings.xml 示例,可用来 拉取和发布 私仓中的 JAR 包(release 和 snapshot):
带认证和私仓配置的 settings.xml<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyun-mirror</id>
<mirrorOf>central,jcenter,!szsh-release,!szsh-snapshot</mirrorOf>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<servers>
<server>
<id>szsh-release</id>
<username>682ad2040601d2fea63dd8c0</username>
<password>_aIfa[kvnYNy</password>
</server>
<server>
<id>szsh-snapshot</id>
<username>682ad2040601d2fea63dd8c0</username>
<password>_aIfa[kvnYNy</password>
</server>
</servers>
<profiles>
<profile>
<id>rdc</id>
<properties>
<altReleaseDeploymentRepository>
szsh-release::default::https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-release
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
szsh-snapshot::default::https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-snapshot
</altSnapshotDeploymentRepository>
</properties>
<repositories>
<repository>
<id>szsh-release</id>
<url>https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-release</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
<repository>
<id>szsh-snapshot</id>
<url>https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-snapshot</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>rdc</activeProfile>
</activeProfiles>
</settings>
拉取依赖:mvn clean install 或 mvn compile,Maven 会尝试从你私仓拉取 jar。
发布 jar 到私仓:
mvn deploy -DaltDeploymentRepository=szsh-release::default::https://packages.aliyun.com/6825923df9ff7623b1ecd74f/maven/szsh-release
1. 拉取依赖
-
repositories配置了私有仓库(szsh-release和szsh-snapshot); -
servers中提供了这两个仓库的认证信息; -
激活了对应 profile(你用了
<activeProfile>rdc</activeProfile>);
所以只需要正常执行:
就可以从私仓拉取 jar 包。
2. 发布构建产物
配置中通过 <altReleaseDeploymentRepository> 和 <altSnapshotDeploymentRepository> 指定了发布地址。
Maven 发布时是使用 deploy 阶段,会读取这些 <properties>:
-
对于 release 版本:
Maven 会自动发布到
szsh-release仓库。 -
对于 snapshot 版本:
pom 中版本必须是1.0.0-SNAPSHOT这类形式,Maven 才会推送到szsh-snapshot仓库。
发布注意事项
-
必须执行
mvn deploy,不是install; -
必须提供正确版本号:
-
1.0.0→ 发布到 release 仓库; -
1.0.0-SNAPSHOT→ 发布到 snapshot 仓库;
-
小结
| 功能 | 是否支持 | 条件 |
|---|---|---|
| 拉取私仓依赖 | ✅ | 已配置 <repositories> 和认证信息 |
| 发布私仓 | ✅ | 已配置 <altReleaseDeploymentRepository> 和 <servers> |
在 Maven 的 settings.xml 中,不同的配置片段有明确的用途,我们可以从“拉取依赖” 和 “发布构建产物” 两大功能进行拆解:
用于 拉取依赖 的配置
这部分是为了从仓库中下载 jar 包、插件等依赖:
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!szsh-release,!szsh-snapshot</mirrorOf>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
-
设置中央仓库(或公共镜像)的替代地址;
-
排除私仓(否则会被镜像覆盖,导致无法从私仓拉取);
<repositories>
<repository>
<id>szsh-release</id>
<url>https://packages.aliyun.com/.../szsh-release</url>
...
</repository>
<repository>
<id>szsh-snapshot</id>
<url>https://packages.aliyun.com/.../szsh-snapshot</url>
...
</repository>
</repositories>
指定私有仓库用于拉取 release 和 snapshot 类型的依赖。
servers(拉取时用于认证)
<servers>
<server>
<id>szsh-release</id>
<username>...</username>
<password>...</password>
</server>
</servers>
-
与
<repositories>中的 id 对应; -
拉取私仓 jar 包时提供认证凭据。
用于 发布构建产物 的配置
这部分是为了将构建好的 jar 上传到私有仓库:
profiles > profile > properties
<properties>
<altReleaseDeploymentRepository>
szsh-release::default::https://packages.aliyun.com/.../szsh-release
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
szsh-snapshot::default::https://packages.aliyun.com/.../szsh-snapshot
</altSnapshotDeploymentRepository>
</properties>
-
告诉 Maven deploy 阶段,release 和 snapshot 构件应分别发布到哪个仓库;
-
注意格式是:
<id>::layout::url
servers(发布时也会用到认证)
<servers>
<server>
<id>szsh-release</id> <!-- 与发布目标仓库 id 匹配 -->
<username>...</username>
<password>...</password>
</server>
</servers>
总结对照表
| 配置位置 | 用途 | 说明 |
|---|---|---|
<mirrors> |
拉取 | 设置公共仓库镜像 |
<profiles> > <repositories> |
拉取 | 指定依赖仓库(含私仓) |
<profiles> > <pluginRepositories> |
拉取插件 | 用于构建插件依赖 |
<servers> |
拉取 & 发布 | 仓库认证 |
<profiles> > <properties> > altXXXDeploymentRepository |
发布 | 指定 jar 上传地址 |
这里是一个 按环境(dev/test/prod)划分的 Maven settings.xml 配置示例,支持不同环境使用不同的私有仓库(带认证),并自动拉取依赖和发布构建产物。
示例结构说明
-
使用
<profile>来区分环境:dev、test、prod。 -
每个环境使用不同的
altDeploymentRepository。 -
每个环境支持从私仓拉取 + 向私仓发布。
-
使用
<activeProfiles>选择当前环境。
完整示例:分环境配置 settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <!-- 公共仓库镜像,排除私有仓库 --> <mirror> <id>aliyun-public</id> <mirrorOf>central,jcenter,!dev-repo,!test-repo,!prod-repo</mirrorOf> <name>aliyun-maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors> <servers> <server> <id>dev-repo</id> <username>your-username-dev</username> <password>your-password-dev</password> </server> <server> <id>test-repo</id> <username>your-username-test</username> <password>your-password-test</password> </server> <server> <id>prod-repo</id> <username>your-username-prod</username> <password>your-password-prod</password> </server> </servers> <profiles> <!-- 开发环境 --> <profile> <id>dev</id> <properties> <altReleaseDeploymentRepository> dev-repo::default::https://your-dev-repo-url </altReleaseDeploymentRepository> <altSnapshotDeploymentRepository> dev-repo::default::https://your-dev-repo-url </altSnapshotDeploymentRepository> </properties> <repositories> <repository> <id>dev-repo</id> <url>https://your-dev-repo-url</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> </profile> <!-- 测试环境 --> <profile> <id>test</id> <properties> <altReleaseDeploymentRepository> test-repo::default::https://your-test-repo-url </altReleaseDeploymentRepository> <altSnapshotDeploymentRepository> test-repo::default::https://your-test-repo-url </altSnapshotDeploymentRepository> </properties> <repositories> <repository> <id>test-repo</id> <url>https://your-test-repo-url</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> </profile> <!-- 生产环境 --> <profile> <id>prod</id> <properties> <altReleaseDeploymentRepository> prod-repo::default::https://your-prod-repo-url </altReleaseDeploymentRepository> <altSnapshotDeploymentRepository> prod-repo::default::https://your-prod-repo-url </altSnapshotDeploymentRepository> </properties> <repositories> <repository> <id>prod-repo</id> <url>https://your-prod-repo-url</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> </profile> </profiles> <!-- 默认激活的环境(可以改成 dev/test/prod) --> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles> </settings>
如何切换环境?
有两种方式:
方法 1:编辑 settings.xml
<activeProfiles>
<activeProfile>prod</activeProfile> <!-- 改成 prod 就是生产 -->
</activeProfiles>
方法 2:命令行传参(推荐)
mvn deploy -Pprod
发布 & 拉取说明
-
拉取依赖时:Maven 会使用当前环境下的
<repositories>。 -
发布构建产物时(
mvn deploy):使用该 profile 中的altReleaseDeploymentRepository或altSnapshotDeploymentRepository。 -
两者都依赖
<servers>中的认证信息(id 要一致)。

浙公网安备 33010602011771号