国庆节10月1日
--


讲清私服为什么能解决团队内部的资源共享与同步、依赖查找顺序为什么是本地仓库到私服再到中央仓库,以及上传下载要配的三个位置(settings 的用户名密码与镜像、工程 pom 的发布地址),并把发行版本与快照版本、install 与 deploy 的区别一次说透

92 篇把多模块工程的”配置”和”构建”都收进了父工程:依赖走继承、版本走 <dependencyManagement>、构建走聚合。但还剩最后一个问题没答 —— 这些自己写出来的模块,怎么给别人用?
tlias-pojo、tlias-utils 是团队自己的代码,中央仓库上当然没有;B 同事的电脑上也没有你本地的仓库。这一篇(PPT 第 23-35 页)讲的就是课件里的第三块内容:私服。
本篇的私服配置没有实测。 私服需要一台 Nexus 服务器(课程里是 192.168.150.101:8081,对应资料 资料/04. maven私服/nexus.zip),本机没有搭建、也没打算搭,所以下面的三步配置、仓库类型、上传下载流程全部按课件与讲义原文整理(代码与课程代码 tlias-parent/pom.xml 里的配置一致,配置项的写法没有改动)。文中的”本机实测”只会用在确实跑过的那部分(构建顺序、本地仓库的位置)。
课件截图里 Nexus 的版本是 OSS 3.40.0-03;课程资料打包的 nexus.zip 里是 3.75.1-01 —— 版本不影响操作,要记的是地址和仓库名。
PPT 第 25 页画了一个很典型的局面:A 开发好了 tlias-utils,B 需要用它,两个人都连着”中央仓库”,但中央仓库上根本没有你们公司的模块 —— 所以 B 拿不到(页面上用一个 X 标掉了这条路)。
没有私服时,现实中只能这么办:
| 土办法 | 问题 |
|---|---|
| 把模块打包成 jar,用聊天工具/共享盘发给 B | 版本一多就乱:B 手里可能同时有 1.0、1.0-SNAPSHOT、别人改过的”最终版” |
| 让 B 手动把 jar 装进自己的本地仓库 | 操作繁琐,还得记住坐标和命令;A 修了 bug 还得再发一次 |
| 干脆把源码复制给对方 | 对方改了不会回流,两边越来越不一致 |
PPT 第 26 页给出解法:A 把模块上传到私服,B 直接从私服下载 —— 中间这一台服务器就是全团队共享的”仓库”。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
这句话里有三个关键信息:
本地仓库 → 私服 → 中央仓库
| 顺序 | 去哪找 | 什么时候会走到这一步 |
|---|---|---|
| ① | 本地仓库 | 永远先看本机 —— 有就直接用,不上网 |
| ② | 私服 | 本地没有时问私服:团队自己的模块在这里(如 tlias-utils),中央仓库的依赖私服也能代拉 |
| ③ | 中央仓库 | 私服里也没有、且私服不去代理时,才直接找中央仓库(实际项目里多半被私服全接走了) |
这个顺序解释了私服的两个作用:资源共享(自己人写的模块放上去,全团队都能依赖)+ 资源同步(有人下过的依赖,别人不用再去外网下一遍)。
PPT 第 27 页的”注意”也交代了心态:私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。 —— 换句话说,这一节要掌握的是”怎么配”,搭服务器本身是运维的事。
| PPT 的问题 | 答案 |
|---|---|
| Maven 私服的作用是什么? | 解决团队内部的资源共享与资源同步问题 |
| 有了私服之后依赖查找的顺序是什么样的? | 本地仓库 → 私服 → 中央仓库 |
PPT 第 30 页把私服的内部结构和要配置的东西画在一起了。私服里面按用途分了仓库:
1私服(Nexus)2├── 仓库(release) ← 存放 RELEASE 发行版本3├── 仓库(snapshot) ← 存放 SNAPSHOT 快照版本4└── 仓库(central) ← 代理外部中央仓库要配的三类信息(PPT 第 30 页列出来的三行):
| 要配置的信息 | 配在哪个文件 | 用在哪一步 |
|---|---|---|
| 连接私服的地址(url 地址) | settings.xml(mirrors + profiles) | 下载依赖时去哪儿找 |
| 访问私服的用户名/密码 | settings.xml(servers) | 上传/下载的身份认证 |
| 上传资源的位置(url 地址) | 工程的 pom.xml(distributionManagement) | 上传(发布)资源时传到哪个仓库 |
顺带一句:配置里出现的 maven-public 是私服里的”仓库组”地址 —— Nexus 会把 release、snapshot、central 几个仓库合成一个入口,下载时只要问这一个地址,不用挨个仓库去试。
课件里的私服地址是 http://192.168.150.101:8081(课程虚拟机);课程代码 tlias-parent/pom.xml 里写的是 http://localhost:8081(老师本机的 Nexus)。地址会随环境变,id 和”谁配谁”的对应关系不能变 —— 下一节的配置里会反复看到同一批 id。
这三步是固定套路(PPT 第 35 页的原话是”固定的,参照讲义操作即可”),照抄的时候只要保证地址、账号、id 三样东西前后对得上就行。下面所有配置片段与 PPT 第 31-33 页逐字一致。
settings.xml 的 servers)#PPT 第 31 页:“设置私服的访问用户名/密码(settings.xml 中的 servers 中配置)”:
1<server>2 <id>maven-releases</id>3 <username>admin</username>4 <password>admin</password>5</server>6<server>7 <id>maven-snapshots</id>8 <username>admin</username>9 <password>admin</password>10</server><server> 分别对应私服里发行版仓库和快照仓库的账号(课件里用的账号密码就是 admin/admin);<id> 不是随便起的:后面第二步 distributionManagement 里会写同样的 <id>,Maven 靠它把”上传地址”和”这组账号密码”配成一对;settings.xml 的位置就是 24 篇里配本地仓库、配阿里云镜像的那个文件(在 Maven 的 conf 目录下或用户目录的 .m2 下)。PPT 第 32 页:“IDEA 的 maven 工程的 pom 文件中配置上传(发布)地址”:
1<distributionManagement>2 <repository>3 <id>maven-releases</id>4 <url>http://192.168.150.101:8081/repository/maven-releases/</url>5 </repository>6 <snapshotRepository>7 <id>maven-snapshots</id>8 <url>http://192.168.150.101:8081/repository/maven-snapshots/</url>9 </snapshotRepository>10</distributionManagement>| 子标签 | 对应什么 | 什么时候用得上 |
|---|---|---|
<repository> | RELEASE 版本的上传地址 | 模块版本是”发行版”(坐标里不带 -SNAPSHOT)时,传到 maven-releases 仓库 |
<snapshotRepository> | SNAPSHOT 版本的上传地址 | 模块版本是”快照版”(坐标里带 -SNAPSHOT)时,传到 maven-snapshots 仓库 |
两个 <id> 必须和第一步 settings.xml 里 <server> 的 <id> 一一对应 —— 否则 Maven 不知道这次上传该用哪组账号密码,私服会拒绝这次发布(认证失败)。
这段配置一般写在父工程里:课程代码里它就在 tlias-parent/pom.xml。子工程继承父工程之后,各自发布时也会沿用这份”上传地址说明”,版本是快照就进快照仓库、是发行版就进发行版仓库。
settings.xml 的 mirrors、profiles)#PPT 第 33 页:“设置私服依赖下载的仓库组地址(settings.xml 中的 mirrors、profiles 中配置)“。这一段又分两块:
mirrors(镜像)——把”要下载”的请求都指到私服:
1<mirror>2 <id>maven-public</id>3 <mirrorOf>*</mirrorOf>4 <url>http://192.168.150.101:8081/repository/maven-public/</url>5</mirror>profiles(仓库配置)——显式打开 release / snapshot 两种下载:
1<profile>2 <id>allow-snapshots</id>3 <activation>4 <activeByDefault>true</activeByDefault>5 </activation>6 <repositories>7 <repository>8 <id>maven-public</id>9 <url>http://192.168.150.101:8081/repository/maven-public/</url>10 <releases>11 <enabled>true</enabled>12 </releases>13 <snapshots>14 <enabled>true</enabled>15 </snapshots>16 </repository>17 </repositories>18</profile>这两块各管一件事:
| 配置块 | 作用 | 关键点 |
|---|---|---|
<mirror> | 告诉 Maven:“要下载依赖时,别去别处,统一去私服这个地址” | <mirrorOf>*</mirrorOf> 表示所有仓库请求都走这个镜像;maven-public 是仓库组地址(一个入口覆盖 release + snapshot + central) |
<profile> | 声明”私服这个仓库,发行版和快照版都能下” | <releases>、<snapshots> 都设成 enabled=true;<activeByDefault>true</activeByDefault> 表示默认激活,不用每次手动指定 |
只看下载的话,mirrors 一条就够;课件里再加上 profiles,是为了把”这个仓库既能下发行版、也能下快照版”写明确 —— 快照版本默认不是”随便下”的,团队内部的开发版本要想让别人直接拉到,就得显式打开 <snapshots><enabled>true</enabled></snapshots>。
| # | 要配什么 | 文件 | 标签 | 关键点 |
|---|---|---|---|---|
| ① | 访问私服的用户名/密码 | settings.xml | <servers> → <server> | 两条:id 为 maven-releases、maven-snapshots |
| ② | 上传资源的位置(发布地址) | 工程 pom.xml | <distributionManagement> | <repository>(release)/ <snapshotRepository>(snapshot),id 与 ① 对应 |
| ③ | 连接私服的地址(下载) | settings.xml | <mirrors> + <profiles> | 镜像 mirrorOf=* 指向 maven-public;profile 里 release/snapshot 都 enabled |
版本号后面带不带 -SNAPSHOT,决定了这个模块传到哪个仓库、也决定了别人拿到的是”固定版”还是”开发中的版”:
RELEASE(发行版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的 RELEASE 仓库中。 SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的 SNAPSHOT 仓库中。
| 对比项 | RELEASE(发行版本) | SNAPSHOT(快照版本) |
|---|---|---|
| 含义 | 功能趋于稳定、当前更新停止,可以用于发行的版本 | 功能不稳定、尚处于开发中的版本 |
| 版本号长什么样 | 1.0、1.0.1(不带 -SNAPSHOT) | 1.0-SNAPSHOT(带 -SNAPSHOT 后缀) |
| 传到私服的哪个仓库 | maven-releases(RELEASE 仓库) | maven-snapshots(SNAPSHOT 仓库) |
对应 distributionManagement 的哪个标签 | <repository> | <snapshotRepository> |
| 什么时候用 | 模块稳定了、要正式发布给团队用了 | 模块还在开发、要随时给同事用最新的 |
拿本机实验工程对照一下就很好理解:tlias-pojo、tlias-utils 的版本都是 1.0-SNAPSHOT(还在开发中,属于快照版本),所以它们发布时会走 maven-snapshots 那条线;哪天版本改成 1.0(去掉 -SNAPSHOT),才会走 maven-releases。改版本号 = 改仓库去处,这也是为什么两个地址都要配好。
PPT 第 30 页在”本地仓库”和”私服”之间画了两条命令,正是这两个阶段的区别(命令都来自 26 篇讲的生命周期):
| 命令 | 产物去哪儿 | 谁能用上 | 需要私服吗 |
|---|---|---|---|
mvn install | 本地仓库(本机 Maven 的本地仓库目录,本机是 A:\develop\maven\apache-maven-3.9.14\mvn_repo\) | 只有自己这台机器(本机实验工程的 tlias-pojo、tlias-utils 就是这么被 tlias-web-management 引用上的) | 不需要 |
mvn deploy | 私服(按版本进 maven-releases 或 maven-snapshots) | 整个团队(同事配好下载地址后就能直接依赖) | 需要(并要配好第三节的①②③) |
一句话记法:install 是”装进自己的仓库”,deploy 是”发到团队的仓库”。deploy 比 install 多做一步”上传”—— 所以 deploy 需要 distributionManagement 和账号密码,install 两者都不需要。
发布成功之后,用浏览器打开私服的管理界面就能看到传上去的模块(PPT 第 34 页的截图):

Browse → maven-snapshots 下按坐标层级列出的内容:com → itheima → tlias-parent、tlias-pojo、tlias-utils、tlias-web-management;因为是 1.0-SNAPSHOT 版本,所以它们都进了快照仓库,这正是”上传地址与版本类型对上了”的最直观证据看截图能对上前面两件事:① 仓库是 maven-snapshots(快照仓库)—— 因为模块版本都是 -SNAPSHOT;② 目录层级就是坐标的层级(com → itheima → 模块名),和本地仓库的目录规律一模一样,29 篇里找 xxx.lastUpdated 用的也是这套规律。
| PPT 的问题 | 答案 |
|---|---|
| 私服上传资源及下载资源的步骤? | 固定的,参照讲义操作即可。 —— 落到操作上就是三步配置:① settings.xml 的 <servers> 配用户名/密码;② 工程 pom 的 <distributionManagement> 配上传地址(release / snapshot 两个仓库);③ settings.xml 的 <mirrors> + <profiles> 配私服仓库组地址。上传用 mvn deploy,下载由依赖触发(查找顺序:本地仓库 → 私服 → 中央仓库) |
这一步之所以说”固定”,是因为配置写完就不用再管了:以后新模块加入工程,只要继承了父工程(拿到发布地址)、版本号写对(决定进哪个仓库),执行 deploy 就能自动传上去,别人依赖它也能自动从私服拉下来。
| 问题 | 答案 |
|---|---|
| 私服是什么? | 一种特殊的远程仓库,架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题 |
| 有了私服之后的依赖查找顺序? | 本地仓库 → 私服 → 中央仓库 |
| 私服要自己搭吗? | 一个项目/公司只需要一台即可,无需我们自己搭建,会使用即可 |
| 私服里有哪些仓库? | 仓库(release) 放发行版本、仓库(snapshot) 放快照版本、仓库(central) 代理中央仓库(配置里统一走仓库组 maven-public) |
| 要配哪三类信息? | ① 连接私服的地址(url);② 访问私服的用户名/密码;③ 上传资源的位置(url) |
| 三步配置分别是? | ① settings.xml 的 <servers> 配用户名/密码;② 工程 pom 的 <distributionManagement> 配上传地址(<repository> = release、<snapshotRepository> = snapshot);③ settings.xml 的 <mirrors> + <profiles> 配私服仓库组地址(下载) |
| RELEASE 与 SNAPSHOT 的区别? | RELEASE 发行版本:功能趋于稳定、当前更新停止,可以用于发行的版本,存到 RELEASE 仓库;SNAPSHOT 快照版本:功能不稳定、尚处于开发中的版本,存到 SNAPSHOT 仓库(版本号带 -SNAPSHOT) |
| install 与 deploy 的区别? | install:把模块装进本地仓库(只有自己用得上,不需要私服);deploy:把模块发布到私服(整个团队都能依赖,需要配好服务器地址、账号与上传地址) |
| 怎么验证上传成功了? | 到 Nexus 的 Browse 里看对应仓库(PPT 第 34 页截图:maven-snapshots → com → itheima → tlias-*),按坐标层级就能找到自己传上去的模块 |
maven-public)settings.xml 的 <servers> 配私服的访问用户名/密码(id 分别为 maven-releases、maven-snapshots);② 工程 pom 的 <distributionManagement> 配上传(发布)地址——<repository> 是 RELEASE 版本地址、<snapshotRepository> 是 SNAPSHOT 版本地址;③ settings.xml 的 <mirrors> + <profiles> 配私服依赖下载的仓库组地址(镜像 <mirrorOf>*</mirrorOf> + profile 里 release/snapshot 都 enabled=true、activeByDefault=true)-SNAPSHOT-SNAPSHOT 后缀(如本机实验工程的 tlias-pojo:1.0-SNAPSHOT)install 把模块安装到本地仓库(只有自己这台机器能用,不需要私服);deploy 把模块发布(上传)到私服(整个团队都能依赖,需要配好用户名密码和上传地址)Browse 对应仓库(如 maven-snapshots),按坐标层级(com → itheima → 模块名)就能看到自己传上去的模块deploy 上传 + 依赖下载) 2-1 让 Maven 能以团队账号登录私服
私服(Nexus)上有两个仓库:一个收发行版本、一个收快照版本,两个仓库的账号都是 admin / admin。请写出”让 Maven 知道这两组账号”的配置片段:
test_93_私服配置.xml 里已经给了写作区。)一级 · 思路:账号密码属于”机器相关”的东西(每个人的私服地址可能不同),所以它不写在工程里,而写在 Maven 自己的全局配置里
二级 · 方法:在 settings.xml 里用 <servers> 包两个 <server>,每个里面有 <id>、<username>、<password>;id 要和发布地址那段配置(<distributionManagement>)里的 id 一一对应
三级 · 骨架:<server><id>maven-____</id><username>____</username><password>____</password></server> ×2
settings.xml 里(就是配本地仓库、阿里云镜像的那个文件):
1<server>2 <id>maven-releases</id>3 <username>admin</username>4 <password>admin</password>5</server>6<server>7 <id>maven-snapshots</id>8 <username>admin</username>9 <password>admin</password>10</server>id 分别是 maven-releases(发行版本仓库)和 maven-snapshots(快照版本仓库);它们要和工程 pom 里 <distributionManagement> 的 <repository> / <snapshotRepository> 的 <id> 一一对应。 2-2 告诉 Maven “我发布的东西该传到哪”
现在要把团队自己写的 tlias-utils 发布到私服(地址 http://192.168.150.101:8081),私服里有两个仓库:maven-releases、maven-snapshots。请写出这段写在工程 pom 里的配置:
test_93_私服配置.xml 里已经给了写作区。)一级 · 思路:上传地址是”工程相关”的(这个工程发到哪个私服),所以写在工程的 pom 里;两种版本对应两个地址,就是两个标签
二级 · 方法:用 <distributionManagement>,里面 <repository> 收发行版本、<snapshotRepository> 收快照版本,两个 id 和 settings.xml 的 <server> 对应;放到父工程里,子工程继承后都能用
三级 · 骨架:<distributionManagement><repository><id>maven-____</id><url>____</url></repository><snapshotRepository>…</snapshotRepository></distributionManagement>
1.
1<distributionManagement>2 <repository>3 <id>maven-releases</id>4 <url>http://192.168.150.101:8081/repository/maven-releases/</url>5 </repository>6 <snapshotRepository>7 <id>maven-snapshots</id>8 <url>http://192.168.150.101:8081/repository/maven-snapshots/</url>9 </snapshotRepository>10</distributionManagement>tlias-parent/pom.xml):这样所有子工程都继承到同一份”上传地址说明”,发布时按各自的版本号自动进对应的仓库,不用每个模块都配一遍。-SNAPSHOT 时(如 1.0)属于 RELEASE 发行版本,会进 <repository> 指的 maven-releases 仓库;带 -SNAPSHOT(如 1.0-SNAPSHOT)属于 SNAPSHOT 快照版本,会进 <snapshotRepository> 指的 maven-snapshots 仓库。
(说明:本机没有 Nexus,这段配置按 PPT 第 32 页整理,没有实测。) 2-3 让同事能自动从私服下到团队的模块
同事 B 的工程要依赖 tlias-utils。除了在自己的工程 pom 里写依赖坐标,还要让 B 的 Maven”去哪找这个依赖”。请写出这段写在 settings.xml 里的配置:
http://192.168.150.101:8081/repository/maven-public/);test_93_私服配置.xml 里已经给了写作区。)一级 · 思路:下载地址也写在 settings.xml(每人环境不同),分两块:一块”把请求引到私服”(镜像),一块”声明这个仓库能下哪两种版本”
二级 · 方法:<mirrors> 里一条 <mirror>,<mirrorOf> 匹配所有仓库;<profiles> 里一个 <profile>,<repositories> 里写仓库地址,<releases>/<snapshots> 都 enabled=true,<activeByDefault>true</activeByDefault> 让它默认生效
三级 · 骨架:<mirror><id>maven-public</id><mirrorOf>____</mirrorOf><url>____</url></mirror>;<profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories>…</repositories></profile>
1~2.
1<mirror>2 <id>maven-public</id>3 <mirrorOf>*</mirrorOf>4 <url>http://192.168.150.101:8081/repository/maven-public/</url>5</mirror>1<profile>2 <id>allow-snapshots</id>3 <activation>4 <activeByDefault>true</activeByDefault>5 </activation>6 <repositories>7 <repository>8 <id>maven-public</id>9 <url>http://192.168.150.101:8081/repository/maven-public/</url>10 <releases>11 <enabled>true</enabled>12 </releases>13 <snapshots>14 <enabled>true</enabled>15 </snapshots>16 </repository>17 </repositories>18</profile>两块的分工:<mirrorOf>*</mirrorOf> 把所有仓库请求都引到私服的仓库组地址;<profile> 则显式声明”这个地址既能下发行版、也能下快照版”,并且默认激活(不用手动选)。同事 B 的模块版本是 1.0-SNAPSHOT(快照版本),少了 <snapshots><enabled>true</enabled></snapshots> 这一项是拉不到的。
3. 查找顺序:本地仓库 → 私服 → 中央仓库。B 的本地仓库没有 tlias-utils,于是问私服;私服里正是 A 发布上去的那份,直接下载成功。
(说明:本机没有 Nexus,这段配置按 PPT 第 33 页整理,没有实测。)
2-4 该用哪条命令、该用哪个版本
判断下面几种场景,分别回答”用 install 还是 deploy”和”版本号带不带 -SNAPSHOT”,并各说一句理由:
tlias-pojo,只想让本机的 tlias-web-management 能引用到今天改的这份;tlias-utils 还在开发中,但同事要每天拉到你现在这份来联调;tlias-utils 测完了,团队要把它当正式版本固定下来给别人依赖。一级 · 思路:先问”要给谁用”——自己 / 团队临时联调 / 团队正式使用;“给团队”就得传到私服(deploy),“版本稳不稳定”决定带不带 -SNAPSHOT
二级 · 方法:本地自己用 → install;团队用 → deploy;开发中 → -SNAPSHOT(进快照仓库);稳定发行 → 去掉 -SNAPSHOT(进发行仓库)
三级 · 骨架:第 1 种 = ____ + 版本(随意,本地自己用);第 2 种 = ____ + ____-SNAPSHOT;第 3 种 = ____ + ____(去掉后缀)
mvn install,版本带不带 -SNAPSHOT 都行(自己本机用,坐标能对上即可)。理由:install 把模块装进本地仓库,本机的 tlias-web-management 就能依赖到,完全不需要私服。mvn deploy,版本用 -SNAPSHOT(如 1.0-SNAPSHOT)。理由:要给同事用就得发布到私服(deploy);还在开发中属于快照版本,进 maven-snapshots 仓库 —— 本机实验工程里的 tlias-pojo、tlias-utils 版本正是 1.0-SNAPSHOT。mvn deploy,版本去掉 -SNAPSHOT(如 1.0)。理由:测完、功能趋于稳定、更新停止,属于 RELEASE 发行版本,进 maven-releases 仓库;这样别人拿到的就是固定版本,不会被你后续的改动”带着走”。 3-1 把一台私服的配置从头到尾写一遍,并说清流程
场景:团队新搭了一台私服(Nexus),地址 http://192.168.150.101:8081,账号 admin/admin,仓库有 maven-releases、maven-snapshots、maven-public(仓库组)。你们的多模块工程 tlias 要把 tlias-utils 共享给别的团队。请按 6 步完成:
tlias-utils 现在还在开发,版本号写成什么?等功能稳定、要正式发行时改成什么?分别会进哪个仓库?tlias-utils 这个依赖,查找顺序是什么?② 同事发布时报”未授权/401”,第一个该检查什么?
(练习文件 test_93_私服配置.xml 里按这 6 步给了写作区。)涉及知识点
| 知识点 | 在这里的应用 |
|---|---|
| 私服的作用 | 团队内部的资源共享与资源同步 |
| 依赖查找顺序 | 本地仓库 → 私服 → 中央仓库 |
settings.xml 的 <servers> | 私服的用户名/密码(两组 id) |
工程 pom 的 <distributionManagement> | 上传地址:<repository> / <snapshotRepository> |
settings.xml 的 <mirrors> + <profiles> | 私服下载地址与 release/snapshot 开关 |
| RELEASE / SNAPSHOT | 版本号后缀决定进哪个仓库 |
| install / deploy | 本地仓库 vs 私服 |
一级 · 思路:三步配置按”账号(settings)→ 上传地址(pom)→ 下载地址(settings)“的顺序写,每一步都回答”写给谁看、靠什么和下一步对上”
二级 · 方法:账号和下载地址写在 settings.xml(环境相关),上传地址写在工程 pom(工程相关,放父工程);两个 id 名(release/snapshot)贯穿三处;发布用 deploy、本机用 install;开发中带 -SNAPSHOT、稳定了去掉
三级 · 骨架:<servers> → <distributionManagement> → <mirrors> + <profiles>;版本 1.0-____ ↔ 1.0;命令 mvn ____ ↔ mvn ____
settings.xml,两组,id 必须叫 maven-releases、maven-snapshots):
1<server>2 <id>maven-releases</id>3 <username>admin</username>4 <password>admin</password>5</server>6<server>7 <id>maven-snapshots</id>8 <username>admin</username>9 <password>admin</password>10</server>tlias-parent/pom.xml):
1<distributionManagement>2 <repository>3 <id>maven-releases</id>4 <url>http://192.168.150.101:8081/repository/maven-releases/</url>5 </repository>6 <snapshotRepository>7 <id>maven-snapshots</id>8 <url>http://192.168.150.101:8081/repository/maven-snapshots/</url>9 </snapshotRepository>10</distributionManagement>settings.xml):
1<mirror>2 <id>maven-public</id>3 <mirrorOf>*</mirrorOf>4 <url>http://192.168.150.101:8081/repository/maven-public/</url>5</mirror>1<profile>2 <id>allow-snapshots</id>3 <activation>4 <activeByDefault>true</activeByDefault>5 </activation>6 <repositories>7 <repository>8 <id>maven-public</id>9 <url>http://192.168.150.101:8081/repository/maven-public/</url>10 <releases>11 <enabled>true</enabled>12 </releases>13 <snapshots>14 <enabled>true</enabled>15 </snapshots>16 </repository>17 </repositories>18</profile><mirror> 管”去哪找”(<mirrorOf>*</mirrorOf> = 所有请求都走私服);<profile> 管”能下什么”(release、snapshot 都 enabled=true,且 activeByDefault=true 默认生效)。mvn deploy;只想本机用(装进本地仓库)用 mvn install。前者比后者多做”上传”这一步,所以需要 1、2 两步的配置。1.0-SNAPSHOT(快照版本,进 maven-snapshots 仓库);稳定、正式发行时改成 1.0(RELEASE 发行版本,进 maven-releases 仓库)。settings.xml 里 <server> 的 <id> 和工程 pom 里 <distributionManagement> 的 <id> 是否一一对应(上传靠 id 把地址和账号配对),其次确认账号密码写对、以及自己是否有该仓库的上传权限。
(说明:本机没有 Nexus,以上配置均按 PPT 第 31-33 页与课程代码整理,没有实测;本机实测过的只有本地仓库的构建与 install(见 92 篇)。)如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


