Nexus的简单使用及setting.xml、pom.xml配置

Nexus的简单使用及setting.xml、pom.xml配置

具体私库搭建可自行百度如:

https://blog.csdn.net/luozhonghua2014/article/details/81583510

本文主要简单介绍nexus及项目中的使用

Nexus介绍

Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。

Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。

Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。 

Nexus支持WebDAV与LDAP安全身份认证。 

Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。

 

为什么要构建Nexus私服?

如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

 

总之,在本地构建nexus私服的好处有:

1)加速构建;

2)节省带宽;

3)节省中央maven仓库的带宽;

4)稳定(应付一旦中央服务器出问题的情况);

5)控制和审计;

6)能够部署第三方构件;

7)可以建立本地内部仓库;

8)可以建立公共仓库

这些优点使得Nexus日趋成为最流行的Maven仓库管理器。

 

搭建Nexus私库需要配置Java环境

 

Nexus默认的仓库类型主要有以下种:

   group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;

   hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);

   proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);

Nexus的简单使用及setting.xml、pom.xml配置_第1张图片

 

maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar 

maven-releases:私库发行版(正式版本),用来部署管理内部的发布版本构件的宿主类型仓库

maven-snapshots:私库快照(调试版本),用来部署管理内部的快照版本构件的宿主类型仓库

maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

 

仓库组通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包,也可以直接从宿主仓库、代理仓库下载。

 

自定义构建的仓库组代理仓库的顺序为(可理解为检索jar的顺序):releases,snapshots,3rd party,central。

 

Nexus默认的端口是8081,可以在etc/nexus-default.properties配置中修改。

Nexus默认的用户名密码是admin/admin123

 

使用Nexus时首先需要修改maven-releases仓库的Deployment pollcy为:Allow redeploy(登陆后才有设置按钮)

Nexus的简单使用及setting.xml、pom.xml配置_第2张图片

需要打包上传的模块下的pom.xml文件中添加如下配置(配置介绍在篇底):


    
        nexus
        maven-releases
        http://localhost:8081/repository/maven-releases/
    

    
        nexus
        maven-snapshot
        http://localhost:8081/repository/maven-snapshots/
    

 

name自定义,url对应maven-releases、maven-snapshots的地址Nexus的简单使用及setting.xml、pom.xml配置_第3张图片

根据项目版本号判断上传相应的仓库如:

0.0.1-SNAPSHOT管理调试版本的仓库:maven-snapshots

0.0.1管理正式版本的仓库:maven-releases

 

 

Maven文件setting.xml中servers标签内添加如下配置:

  nexus

  admin

  admin123

 

id对应pom.xml中id,用户名密码为nexus的用户密码

 

打包上传到私库(IDEA中):

Nexus的简单使用及setting.xml、pom.xml配置_第4张图片

 

需要下载用户上传私库中的jar时,在相关项目的需要依赖的模块下pom.xml添加如下配置:


    
        nexus
        maven-public
        http://localhost:8081/repository/maven-public/
    

url为组仓库的地址

Nexus的简单使用及setting.xml、pom.xml配置_第5张图片

 

及相关依赖如:


    com.chengjia
    provider-service
    0.0.1-SNAPSHOT

 

pom.xml文件中配置


    


        nexus


        maven-releases


        http://localhost:8081/repository/maven-releases/
    


    
        nexus
        maven-snapshot
        http://localhost:8081/repository/maven-snapshots/
    

 

< repository >节点下的< id >对应maven的setting.xml文件中的server的id

  

...

  nexus

  admin

  admin123

  

 

当pom.xml中版本号后加上了-SNAPSHOT时,项目打包上传到地址:http://localhost:8081/repository/maven-snapshots/

0.0.1-SNAPSHOT

正式版本打包上传需要去掉-SNAPSHOT

 

 

maven的setting配置文件中mirror标签、pom.xml文件repository标签

repository标签

maven里有两种仓库,本地仓库和远程仓库。

远程仓库相当于公共的仓库,大家都能看到。

本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。

当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。

如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。

如果项目中没有配置仓库则默认请求的远程仓库为:http://repo1.maven.org/maven2

相当于pom.xlm配置:

 

  false

 

  central

  Maven Repository Switchboard

  http://repo1.maven.org/maven2

 

 

远程仓库可以在工程的pom.xml文件里指定:


    

该镜像的唯一定义符
        nexus
        maven-public

构建系统会优先考虑使用该URL,而非使用默认的服务器URL
        http://localhost:8081/repository/maven-public/
    

 

mirror标签

 

mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。

如maven默认远程仓库地址为:http://repo1.maven.org/maven2,唯一定义符(id)为:central,我们想将仓库地址修改为:http://localhost:8081/repository/maven-public/可以在setting文件中的标签内添加如下配置:

      nexus

      central

      local nexus

      http://localhost:8081/repository/maven-public/

mirrorOf标签内容central是要替代的仓库的id。

 

高级镜像配置

 

为了满足一些复杂的需求,Maven还支持更高级的镜像配置:

1.*
匹配所有远程仓库。

2.external:*
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。

3.repo1,repo2
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。

4.*,!repo1
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

 

你可能感兴趣的:(项目构建&依赖管理工具)