maven配置文件参考
maven配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--
| ============================================================================
| settings.xml — 公司 Nexus + Maven Central 自动 fallback 版
|
| 核心改动说明:
| 1. mirror 只镜像第三方仓库,不再把 central 强制锁死到 Nexus
| → 这样 Maven 在 Nexus 找不到时,会自动去 Central 找
| 2. pluginRepositories 加了 Maven Central 作为 fallback(priority 更低)
| → 解决 maven-plugins:pom:33 找不到的问题
| 3. 阿里云仓库改用 https(Maven 3.8+ 默认禁止 http 仓库)
| 4. 移除 Nexus plugin repo id 中的特殊字符,避免匹配异常
| 5. 新增 <updatePolicy>always</updatePolicy> 到 pluginRepository,
| 确保每次构建都检查最新插件版本
| ============================================================================
-->
<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">
<!-- ========== 本地仓库路径 ========== -->
<localRepository>/root/.m2/repository/</localRepository>
<!-- ========== 插件组(保持默认即可) ========== -->
<pluginGroups>
</pluginGroups>
<!-- ========== 代理(当前未启用) ========== -->
<proxies>
</proxies>
<!-- ========== 服务器认证信息 ========== -->
<servers>
<server>
<id>local-nexus</id>
<username>admin</username>
<password>Abcd@2018</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>888pwd</password>
</server>
<server>
<id>api-server</id>
<username>admin</username>
<password>1qa2ws3ed</password>
</server>
<server>
<id>tomcat-server</id>
<username>admin</username>
<password>1qa2ws3ed</password>
</server>
<!-- Central 不需要认证,但加一个 server 占位,避免某些 Maven 版本警告 -->
<server>
<id>maven-central</id>
<username>anonymous</username>
<password>anonymous</password>
</server>
</servers>
<!-- ========== 镜像配置 ========== -->
<mirrors>
<!--
关键改动:mirrorOf 从 "central" 改为 "!maven-central,*"
- !maven-central 表示排除 maven-central(让 Central 直连)
- * 表示其他所有仓库都走 Nexus
- 这样当 Nexus 没有某个 artifact 时,Maven 会去 Central 找
-->
<mirror>
<id>nexus-mirror</id>
<name>Nexus Public Mirror (fallback to Central allowed)</name>
<url>http://192.168.55.248:8081/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<!-- ========== 配置文件 ========== -->
<profiles>
<!-- ========== 主 profile:Nexus + Central fallback ========== -->
<profile>
<id>nexus</id>
<!-- ===== 普通依赖仓库 ===== -->
<repositories>
<!-- 第 1 优先级:公司 Nexus -->
<repository>
<id>nexus-repo</id>
<url>http://192.168.55.248:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
<priority>1</priority>
</repository>
<!-- 第 2 优先级:Maven Central(fallback) -->
<repository>
<id>maven-central</id>
<name>Maven Central (fallback)</name>
<url>https://repo.maven.apache.org/maven2</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<priority>100</priority>
</repository>
<!-- 第 3 优先级:阿里云(国内加速,https) -->
<repository>
<id>aliyun-central</id>
<name>Aliyun Maven Repository (https)</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
<priority>50</priority>
</repository>
</repositories>
<!-- ===== 插件仓库(关键修复点) ===== -->
<pluginRepositories>
<!-- 第 1 优先级:公司 Nexus 插件仓库 -->
<pluginRepository>
<id>nexus-plugin</id>
<name>Nexus Plugin Repository</name>
<url>http://192.168.55.248:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<priority>1</priority>
</pluginRepository>
<!-- 第 2 优先级:Maven Central 插件仓库(fallback) -->
<!--
这是解决 maven-plugins:pom:33 找不到问题的关键!
当 Nexus 里没有某个插件的父 POM 时,Maven 会自动来这里找。
-->
<pluginRepository>
<id>maven-central-plugins</id>
<name>Maven Central Plugins (fallback)</name>
<url>https://repo.maven.apache.org/maven2</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<priority>100</priority>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- ========== Sonar 配置(保持不变) ========== -->
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:mysql://192.168.51.230:3306/sonarqube_dev</sonar.jdbc.url>
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>root</sonar.jdbc.username>
<sonar.jdbc.password>meimima</sonar.jdbc.password>
<sonar.host.url>http://192.168.51.227:1010</sonar.host.url>
</properties>
</profile>
</profiles>
<!-- ========== 激活的 profile ========== -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
- <mirrorOf>*</mirrorOf>:依赖下载(拉取 jar 包):
mirrorOf>*全部走 Nexus 私服,中央仓库、pom 里写的下载仓库 URL直接失效,不会访问,settings.xml中配置的repositories 和pluginRepositories中配置的也没有任何作用,全部失效,不影响本地.m2,本地优先,没有才去远程拉,这配置对mvn deploy上传包完全无效,只负责拉取,不负责上传
所以企业私服环境,开启 mirrorOf=”*” 之后,pom 里面不要再写<repositories>,完全多余,但是!!有一个极其重要的例外!pom.xml中的<distributionManagement> 完全不受镜像影响,依旧生效!
<distributionManagement>
<snapshotRepository>
<id>snapshots</id>
<url>http://192.168.55.248:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
注:这个标签不属于<repositories>!!它是专门给 mvn deploy【上传】用的仓库
这个标签中的snapshots需要跟上面settings.xml中的server对应,否则会提示无法登录到nexus中,如图:

一张清单:开启 mirrorOf=”*” 后哪些废了、哪些还活着
| 配置标签 | 是否还生效 | 说明 |
|---|---|---|
pom.xml <repositories> | ❌失效 | 下载不走这里,全部走镜像 |
pom.xml <pluginRepositories> | ❌失效 | 下载 maven 插件也走镜像 |
settings.xml <repositories> | ❌失效 | 同样被镜像拦截 |
pom.xml <distributionManagement> | ✅完全生效 | deploy 上传目标地址,镜像管不到它 |
settings.xml <servers> | ✅完全生效 | 给 distributionManagement 提供账号密码(你 401 报错就是这块) |
<localRepository>本地仓库 | ✅完全生效 | 优先读取本地缓存,镜像不会跳过本地仓库 |
企业最佳实践(mirrorOf=”*” 模式):
- 所有项目 pom.xml 删掉所有<repositories>、<pluginRepositories>,写了也没用;下载统一由 settings 镜像接管
- 只在 pom(或者父 pom)保留
<distributionManagement>,用来定义 deploy 上传快照 / 发布库地址 - 私服账号密码统一放在 settings.xml 的
<servers>


