maven 全局 settings.xml 必须放在 maven 安装目录的 conf/settings.xml 下,如 /opt/maven/conf/settings.xml;它对所有用户和项目生效,优先级低于项目级 .mvn/settings.xml 和命令行 -s 指定配置。

settings.xml 放哪儿才算“全局”?
Maven 的全局 settings.xml 不是你随便丢在项目里的那个文件,它必须放在 Maven 安装目录的 conf/settings.xml 路径下。比如 /opt/maven/conf/settings.xml 或 C:\Program Files\Apache\maven\conf\settings.xml。
这个位置决定了所有用户、所有项目默认都会读它——除非显式用 -s 指定其他配置,或项目里有 settings.xml 在 .mvn/ 目录下(那是项目级,优先级更高)。
- 用
mvn -X启动时看日志第一行,会明确打印 “Using settings file: …”,确认它是否真加载了你改的那个文件 - 不要把它复制到
~/.m2/下——那是用户级配置目录,放这里的是~/.m2/settings.xml,不是“全局” - 多个 Maven 版本共存时,每个版本的
conf/目录都要单独配,别以为改一个就全生效
镜像配置写错导致所有依赖拉不下来
企业内网通常用 Nexus 或 Artifactory 做私有仓库,settings.xml 里必须把中央仓库 central 的请求重定向过去,靠的是 <mirror></mirror>。常见错误是只写了 <mirrorof>central</mirrorof>,但没覆盖 repo1、spring-plugins 这些名字老的仓库 ID。
- 正确写法是
<mirrorof>*,!jboss-public-repository-group</mirrorof>:星号匹配所有,再用!排除个别例外(如 JBoss 的仓库) - 镜像
<url></url>必须以/结尾,否则 Nexus 可能 404;比如写成<a href="https://www.php.cn/link/1c20876584941388da40b3b01a9ad897">https://www.php.cn/link/1c20876584941388da40b3b01a9ad897</a>,少斜杠就挂 - 如果用了
<mirrorof>external:http:*</mirrorof>,那走 HTTPS 的仓库反而被跳过,结果连中央仓库都拉不到
profile 激活失败?检查 activeByDefault 和命令行开关
企业环境常按环境(dev/test/prod)切 profile,但很多人改完 settings.xml 里的 <profile></profile>,发现 mvn clean compile 就是不生效。
PHP商城系统是国内领先商城系统,网店系统,购物系统,网上商城系统,B2C商城系统产品.同时也是一个商业的PHP开发框架。PHP 商城系统由内容、文章、会员、留言、订单、 财务、广告、短消息、数据库管理、营销推广、内置支付管理、商品配送管理、无限级分类、全站搜索等多个功能模块插件组成。在当今瞬机万变的市场环境中,快速高效的IT解决方案是您业务成功的关键。我们PHP商城系统能为您量身打造完全符合需求
-
<activebydefault>true</activebydefault>只在没有其他激活条件时才起作用;一旦设置了M2_HOME或用了mvn -Pxxx,它就失效 - 更可靠的方式是用
<activation><activebydefault>true</activebydefault></activation>,且确保该 profile 没被<activation><property></property></activation>或<file></file>锁死 - 命令行用
mvn -Pprod激活时,注意大小写和 profile id 是否完全一致——<id>PROD</id>和-Pprod是不匹配的 - profile 里配了
<repositories></repositories>,但没同步配<pluginrepositories></pluginrepositories>,会导致maven-compiler-plugin这类插件下载失败,报错像Plugin not found in any repo
密码明文写在 settings.xml 里?立刻改掉
很多团队图省事,在 settings.xml 的 <server></server> 里直接写 <password>123456</password>,这是高危操作。
- Maven 支持加密:用
mvn --encrypt-master-password先生成主密钥,再用mvn --encrypt-password加密具体密码,填进<password></password>标签 - 主密钥存在
~/.m2/settings-security.xml,这个文件权限必须是600(Linux/macOS),否则 Maven 拒绝读取 - 如果 CI 环境(如 Jenkins)要用加密密码,得确保构建机上也配置了相同的主密钥,否则解密失败,报错
Cannot decrypt password
企业级配置最难的不是写多少内容,而是让不同人、不同机器、不同 Maven 版本都稳定读到同一份逻辑——路径、激活方式、密码处理,任意一环松动,就会在某次打包时突然崩掉。









