搭建私有maven库发布及使用流程

时间:2021-09-15 06:18:26

一:背景

Apache Maven是当Java技术栈前最流行的项目管理工具,它提供了一系列方便快捷的命令帮助程序员们进行Java工程的开发工作。Maven服务器位于美国,由于出国带宽和众多因素,在国内直接使用Maven的体验并不好。同时,国内还有很多公司的程序员开发机器无法直接连接互联网,鉴于这种情况,在公司区域网架设一部Maven私服能大大提高开发效率。

Apache Maven的私服有很多开源提供商,目前用的最多的就是Sonatype Nexus Repository,以下将简述怎么搭建私有maven库发布及使用流程

二:安装nexus

1、下载地址:http://www.sonatype.com/download-oss-sonatype

2、我们下载nexus-3.0.1-01-win64.exe后双击安装即可,安装完成后默认开放8081端口,当然也可以选gz,解压安装

3: 安装成功后有两个默认账号admin、anonymous,其中admin具有全部权限默认密码admin123;anonymous作为匿名用户,只具有查看权限。

4:使用admin账户登录,可新建

搭建私有maven库发布及使用流程

三:环境配置

1:idea环境下,如果使用内置maven,需要手动生成settings.xml,并关联。
      操作如下
     生成settings.xml 右键pom.xml-Maven-create settings.xml
     File-settings-Maven关联配置
    勾选 User settings file Override
   勾选 Local repository Override
   Eclipse环境,生成的settings文件路径C:\Users\{用户}\.m2\settings.xml

四:发布
  4.1:需要使用有管理权限的用户登录

4.2:创建Repository

4.2.1、create Repository

4.2.2、maven2(hosted)

   4.2.3、insert repository name

   4.2.4、allow redepoly

   4.2.5、create(保存)

4.3:编辑本地maven配置文件(<servers>标签下增加如下内容,username及password填上自己的用户名密码即可)

```xml
<server>
<id>nexus-snapshot</id>
<username>{username}</username>
<password>{password}</password>
</server>
<server>
<id>nexus-release</id>
<username>{username}</username>
<password>{password}</password>
</server>
```

4.4:在待deploy项目中的pom.xml文件中增加如下内容,host及port替换为仓库地址和端口(把项目打包发布到私有maven仓库)

```xml
<distributionManagement>
<repository>
<id>nexus-release</id>
<name>Nexus Release Repository</name>
<url>http://{host}:{port}/repository/maven-releases/</url>
</repository>

<snapshotRepository>
<id>nexus-snapshot</id>
<name>Nexus snapshots Repository</name>
<url>http://{host}:{port}/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
```

4.5:使用(项目中引入jar)

在项目pom.xml文件中添加repository信息

```xml
<repositories>
<repository>
<id>Nexus</id>
<url>http://{host}:{port}/repository/{xxxx}/</url>
</repository>
</repositories>
```

然后就可以像引用其他公共仓库中依赖一样引用我们自己发布的依赖了,例如:

```xml
<dependencies>
<dependency>
<groupId>com.huilianjk</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
```

4.6:在过程中遇到的问题

1:Return code is: 401, ReasonPhrase: Unauthorized 检查 pom中distributionManagement下id必须和settings.xml配置中的service下id一致

2:Return code is: 400 检查发布的Version 是否和上传的仓库的Version policy是否一致

搭建私有maven库发布及使用流程

总结:

1:如果没有.m2\settings.xml,新建一个,并关联项目
2:修改settings.xml,最终如下
```xml
<!-- 配置Maven服务器的账号信息,自动化部署的时候需要用到 -->
<server>
<id>nexus-snapshot</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<id>nexus-release</id>
<username>用户名</username>
<password>密码</password>
</server>
<!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 -->
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://{host}:{port}/repository/maven-public/</url>
</mirror>
</mirrors>
```
3:deploy项目需要修改pom.xml
```xml
<distributionManagement>
<repository>
<!--需要和 settings中service的id一致-->
<id>nexus-release</id>
<name>Nexus Release Repository</name>
<url>http://{host}:{port}/repository/maven-releases/</url>
</repository>

<snapshotRepository>
<!--需要和 settings中service的id一致-->
<id>nexus-snapshot</id>
<name>Nexus snapshots Repository</name>
<url>http://{host}:{port}/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
```
4:使用
```xml
<repositories>
<repository>
<id>nexus</id>
<url>http://{host}:{port}/repository/{xxxx}/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.huilianjk</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
```