Nexus私有仓库搭建核心是三类仓库协同与项目级精准配置:新建company-releases(Disable redeploy)、company-snapshots(Allow redeploy)两个hosted仓库,配置maven-central及阿里云proxy,聚合为company-group并按优先级排序;项目通过pom中distributionManagement和settings.xml加密凭证执行mvn deploy自动发布;全公司统一通过settings.xml的profile和mirror接入group仓库;权限遵循最小够用原则,禁用匿名访问,按角色分配读写权限。

用 Nexus 搭建私有仓库托管和发布企业内部组件,关键不在装得多快,而在结构清晰、权限合理、发布可控。核心是三类仓库协同 + 项目级精准配置,不是堆功能,而是让 release/snapshot 分得清、传得稳、下得快。
搭好三类基础仓库:hosted、proxy、group
不建议直接用默认仓库,必须按企业规范新建并明确分工:
-
Hosted 仓库:专用于存自家构件。建两个——
company-releases(只存正式版,Deployment policy 设为 Disable redeploy)和company-snapshots(存开发中的快照版,设为 Allow redeploy),避免版本覆盖混乱。 -
Proxy 仓库:代理外部源。至少配
maven-central(URL:https://repo1.maven.org/maven2/),国内团队强烈建议加阿里云镜像https://maven.aliyun.com/repository/public,显著提升拉取速度。 -
Group 仓库:统一出口。创建
company-group,把上面两个 hosted 和 proxy 全部加入 Members,并按查找优先级排序——company-releases放最前,其次是company-snapshots,最后是 proxy。这样既能优先命中稳定版,又不影响快照调试和外网依赖回退。
项目发布:用 mvn deploy 自动上传,不手动拖文件
手动 Upload 只适合临时补包,长期维护必须走 Maven 原生发布流程:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在项目
pom.xml中配置<distributionManagement>,明确指向对应仓库 URL,例如:<repository><id>nexus-releases</id><url>http://nexus.company.com/repository/company-releases/</url></repository> - 在
~/.m2/settings.xml的<servers>节点下配凭证,<id>必须与 pom 中的<id>严格一致,密码建议用mvn --encrypt-password加密存储。 - 执行
mvn clean deploy -Dmaven.test.skip=true。Maven 会自动根据<version>含-SNAPSHOT判断投递到 snapshots 还是 releases 仓库,无需改 URL。
客户端统一接入:改 settings.xml,别碰每个 pom
全公司共用一套仓库地址,靠 settings.xml 统一控制,而不是在每个项目里硬写 URL:
立即学习“Java免费学习笔记(深入)”;
- 在
settings.xml的<profiles>中定义 profile,激活时自动注入<repositories>和<pluginRepositories>,URL 指向company-group的地址; - 用
<mirrors>把所有对central的请求重定向到company-group,这样连没改 pom 的老项目也能走私服; - 确保该 profile 默认激活(
<activeByDefault>true</activeByDefault>),新成员装完 Maven 就能直接构建,零额外配置。
权限与安全:最小够用原则
Nexus 默认 admin 权限太高,上线前必须收紧:
- 新建角色(Role),比如
deploy-release,只赋予nx-repository-view-maven2-company-releases-*的 read + add + edit 权限,禁止 delete; - 为不同团队或项目组创建用户,分配对应角色——发版人员给 release 角色,开发人员只给 snapshot 读写权限;
- 关闭匿名访问(Security → Anonymous Access → Disable),所有拉取和上传都强制认证,日志可追溯谁在何时发布了哪个构件。

















