私服的介绍
仓库概念
中央仓库
目前来说: https://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中其他的都是镜像。
仓库镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像,使用镜像可以提高项目构建效率。
仓库的索引
中央仓库带有索引文件以方便用户对其进行搜索,索引每周更新一次,中央仓库的索引有几十M。
黑名单
如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服。
私服
有些公司不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。
私服的搭建
下载nexus的压缩包并解压放在一个没有中文的路径下,使用cmd以管理员身份运行
注:使用 /run 来启动,不要使用 /install (这是安装成一个本地服务)文件目录不要有中文
出现这个结果即启动成功,不要关掉cmd窗口(为了保持启动状态,这与TomCat一样)
浏览器访问 localhost:8081 ,会弹出这个窗口,表示访问成功,自动跳转到下图
登录,去提示的文件路径找到这个文档,使用文本编辑器打开,里面就是密码,复制到这里
登录成功
选择启用匿名
修改私服的中央仓库的地址(记得往下划保存)
修改RELEASES为允许重新发布(记得往下划点击保存)
上传项目到私服
创建maven项目
- 设置本地仓库访问私服的权限,修改maven的conf/settings.xml配置文件,用户名和密码,复制如下代码到相应位置,大约111行。(3.8.5版本的maven可能会有莫名其妙的问题,这里我使用的是3.6.2版本)
<server>
<id>releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
- 重新创建一个新的模板a,配置上传项目中的发布管理,坐标如下
<groupId>com.pan</groupId>
<artifactId>pan-maven-a</artifactId>
<version>1.0-SNAPSHOT</version>
- 在pom.xml中加入以下代码(放在前面)
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
上面的url是仓库的地址
- 执行deploy命令,上传项目到私服
- 上传之后去私服查看snapshots上传的结果
私服下载项目
- 创建另一个模块b
<dependency>
<groupId>com.pan</groupId>
<artifactId>pan-maven-b</artifactId>
<version>1.0-RELEASE</version>
- 依赖于模块a
<!-- b模块,依赖于a模块。先从本地仓库下载,如果没有就会从远程仓库下载 -->
<dependency>
<groupId>com.pan</groupId>
<artifactId>pan-maven-a</artifactId>
<version>1.0-RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
-
删除本地仓库中模块a中的jar包
在本地中maven里面对应的仓库地址里面的模块名中(比如我,我的是…/com/pan),直接删除,这是上传的时候在本地自动存放的,我们模拟下载的过程要先删除本地的jar包,不然也不知道有没有实现我们要的效果。
-
修改maven的\conf\settings.xml文件,项目B是依赖于私服仓库中模块a
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
注:后面还要改回来,以后还是要继续使用阿里云的镜像
-
清除项目b的缓存文件(使用clean), 再编译一次(compile)
-
就可以在b项目使用a项目上传到私服的jar包了,在方法中直接使用
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>