首先我们为什么需要搭建Maven私服,一切技术来源于解决需求,因为我们在实际开发中,当我们研发出来一个公共组件,为了能让别的业务开发组用上,则搭建一个远程仓库很有必要,写完公用组件后,直接发布到远程仓库,别人需要用到时,直接从远程仓库拉取即可,而你升级组件后,只需要再发布一个新版本即可。
Maven私服技术,最常用的就是基于Nexus来搭建。
1. Nexus搭建过程
首先我们需要下载Nexus,官网如下:
Nexus官网
官网不好下载,我费了好大劲下载下来,不过是3.37版本,比较稳定,大家可以从下面这个地址下载:
https://download.csdn.net/download/wu2374633583/87879453
我这里演示用的是windows版本。
解压以后大家就可以看到如下:
nexus-3.37.3-02
:里面会放Nexus启动时所需要的依赖、环境配置;sonatype-work
:存放Nexus运行时的工作数据,如存储上传的jar包等。
我们可以打开下面这个文件,修改一些默认配置,默认端口号是8081,如果你这个端口已被使用,就可以修改,通常不需要更改。
D:\nexus\nexus-3.37.3-02\etc\nexus-default.properties
接着去bin目录下,打开cmd终端,执行启动命令:
nexus.exe /run nexus
时间会比较长,耐心等待一段时间后,我等了足足十几分钟,如果看到如下:
表示启动成功,Nexus初次启动后,会在sonatype-work
目录中生成一个/nexus3/admin.password
文件,这里面存放着你的初始密码,默认账号就是admin,在浏览器输入:
http://localhost:8081
访问Nexus界面,通过初始密码登录,登录后修改密码,改完密码记得重新登录一次,否则后面的操作会没有权限。
2. Nexus私服仓库介绍
登录成功后,点击Repositories会看到一些默认仓库,每个字段含义如下:
Name:仓库的名字;
Type:仓库的类型;
Format:仓库的格式;
Status:仓库的状态;
URL:仓库的网络地址。
仓库总共分为四种类型,如下:
仓库的关系如下:
注意的是,本地的Maven需要配置私服地址,当项目需要的依赖,在本地仓库没有,就会去到相应的宿主/远程仓库拉取;如果宿主仓库也没有,就会根据配置的代理仓库地址,去到中央仓库拉取。
3. Maven的私服配置
步骤1: 修改配置文件
Maven要使用私服,需要修改settings.xml文件。修改settings.xml里的镜像源配置,之前配的阿里云镜像不能用了,改成如下:
<mirror>
<id>nexus-zhuzi</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
步骤2: 在私服中修改访问权限,允许匿名用户访问
最后记得保存。
步骤3:在私服中配置代理仓库地址,即配置镜像源
将默认的中央仓库地址,改为阿里云镜像:
http://maven.aliyun.com/nexus/content/groups/public/
点击Save保存即可。
步骤4:在Maven的settings.xml中,配置私服的账号密码
在<servers>
标签下,配置如下:
<server>
<id>maven-test-release</id>
<username>admin</username>
<password>你的私服账号密码</password>
</server>
<server>
<id>maven-test-snapshot</id>
<username>admin</username>
<password>你的私服账号密码</password>
</server>
4. 项目配置私服
前面配置了本地Maven与私服的关系,接着要配置项目和私服的连接。
步骤1: 为项目创建对应的私服仓库,如果已有仓库,可以直接复用。
我们要注意的就是仓库格式,有三个可选项:
- Release:稳定版,表示存放可以稳定使用的版本仓库;
- Snapshot:快照版,代表存储开发阶段的版本仓库;
- Mixed:混合版,不区分格式,表示混合存储代码的仓库。
为了规范性,建议是Release、Snapshot格式的仓库,各自都创建一个。
步骤2: 在Maven工程的pom.xml文件中,配置对应的私服仓库地址。
<!-- 配置当前工程,在私服中保存的具体位置 -->
<distributionManagement>
<repository>
<!-- 这里对应之前 settings.xml 里配置的server-id -->
<id>maven-test-release</id>
<!-- 这里代表私服仓库的地址,大家只需要把后面的名字换掉即可 -->
<url>http://localhost:8081/repository/maven-test-release/</url>
</repository>
<snapshotRepository>
<id>maven-test-snapshot</id>
<url>http://localhost:8081/repository/maven-test-snapshot/</url>
</snapshotRepository>
</distributionManagement>
步骤3:将当前项目发布到私服仓库
这里可以执行mvn clean deploy命令,也可以通过IDEA工具完成:
这里要注意:
由于配置了私服上的两个宿主仓库,一个为稳定仓库,另一个为快照仓库,所以发布时,默认会根据当前项目的<version>
版本结尾,来选择上传到相应的仓库,例如上图中的结尾是SNAPSHOT
,所以会被发布到快照仓库,如果结尾不是这个后缀时,就会被发布到Release仓库。
还有就是,你要发布的包不能带有上级,即不能有parent依赖,否则在其他人在拉取该项目时,会找不到其父项目而构建失败。要解决这个问题,可以先将parent项目打包并上传至远程仓库,然后再发布依赖于该parent项目的子模块。
5. Nexus配置仓库组
如果我们所处的公司,是一个大型企业,不同团队都有着各自的宿主仓库,而你如果需要其他团队的组件,这时我们不需要在pom.xml中,将远程仓库地址先改为其他团队的地址,而是可以创建一个仓库组来解决。
步骤1: 创建仓库组
大家可以看到,图中的Members区域代表当前仓库组的成员,而这些成员会按照你排列的顺序,具备不同的优先级,越靠前的优先级越高。创建好仓库组后,接着可以去配置一下仓库组,这里有两种方式。
步骤2:配置单个工程与仓库组的映射
这种方式只需修改pom.xml即可:
<repositories>
<repository>
<id>maven-test</id>
<!-- 配置仓库组的地址 -->
<url>http://localhost:8081/repository/maven-test/</url>
<!-- 允许从中拉取稳定版的依赖 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 也允许从中拉取快照版的依赖 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>plugin-group</id>
<url>http://localhost:8081/repository/maven-test/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
在上述这组配置中,配置了<repositories>、<pluginRepositories>
两个标签,第一个是普通依赖的仓库组地址,第二个是插件依赖的仓库组地址,前者针对于pom.xml中的<dependency>
标签生效,后者针对<plugin>
标签生效。
当你通过GAV坐标,引入一个依赖时,如果本地仓库中没找到,则会根据配置的仓库组地址,去到Nexus私服上拉取依赖。不过因为仓库组是由多个仓库组成的,所以拉取时,会根据仓库的优先级,依次搜索相应的依赖,第一个仓库将是最优先搜索的仓库。
步骤3: 配置本地Maven与仓库组的映射
上一种配置方式,只针对于单个Maven工程生效,如果你所有的Maven工程,都需要与Nexus私服上的仓库组绑定,这时就可以直接修改settings.xml文件,如下:
<profile>
<id>maven-test</id>
<repositories>
<repository>
<id>nexus-maven</id>
<url>http://localhost:8081/repository/maven-test/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus-maven</id>
<url>http://localhost:8081/repository/maven-test/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
这组配置要写在<profiles>
标签里面,其他的与前一种方式没太大区别,唯一不同的是多了一个<updatePolicy>
标签,该标签的作用是指定仓库镜像的更新策略,可选项如下:
- always:每次需要Maven依赖时,都先尝试从远程仓库下载最新的依赖项;
- daily:每天首次使用某个依赖时,从远程仓库中下载一次依赖项;
- interval:X:每隔X个小时,下载一次远程仓库的依赖,X只能是整数;
- never:仅使用本地仓库中已经存在的依赖项,不尝试从远程仓库中拉取。
Maven工程使用依赖时,首先会从本地仓库中查找所需的依赖项,如果本地仓库没有,则从配置的远程仓库下载这时会根据<updatePolicy>
策略来决定是否需要从远程仓库下载依赖。
还得激活一下上述配置:
<activeProfiles>
<!-- 这里写前面配置的ID -->
<activeProfile>maven-test</activeProfile>
</activeProfiles>
不过要记住,无论两种方式内的哪一种,都只允许从私服上拉取依赖,如果你的某个工程,想要打包发布到私服上,还是需要配置前面说的<distributionManagement>
标签。文章来源:https://www.toymoban.com/news/detail-475294.html
Maven系列就到此结束了,希望我的整理能够给大家带来帮助!文章来源地址https://www.toymoban.com/news/detail-475294.html
到了这里,关于让我们彻底了解Maven(二)--- Maven私服的搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!