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

时间:2024-05-23 14:51:36

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

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

https://blog.****.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配置

 

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配置

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

<distributionManagement>
    <repository>
        <id>nexus</id>
        <name>maven-releases</name>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus</id>
        <name>maven-snapshot</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

 

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

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

<version>0.0.1-SNAPSHOT</version>管理调试版本的仓库:maven-snapshots

<version>0.0.1</version>管理正式版本的仓库:maven-releases

 

 

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

<server>

  <id>nexus</id>

  <username>admin</username>

  <password>admin123</password>

</server>

 

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

 

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

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

 

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

<repositories>
    <repository>
        <id>nexus</id>
        <name>maven-public</name>
        <url>http://localhost:8081/repository/maven-public/</url>
    </repository>
</repositories>

url为组仓库的地址

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

 

及相关依赖如:

<dependency>
    <groupId>com.chengjia</groupId>
    <artifactId>provider-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

 

pom.xml文件中<distributiomManagement>配置

<!-- 使用分发管理将本项目打成jar包,直接上传到指定服务器 -->

<distributionManagement>

<!--正式版本-->
    <repository>

<!-- nexus服务器中用户名:在settings.xml中<server>的id-->
        <id>nexus</id>

<!-- 这个名称自己定义 -->
        <name>maven-releases</name>

<!-- 上传地址 -->
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>

<!--快照,调试版-->
    <snapshotRepository>
        <id>nexus</id>
        <name>maven-snapshot</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

 

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

<!--maven连接nexus需要验证用户名和密码,否则会报401错误-->

  <servers>

...

<server>

  <id>nexus</id>

  <username>admin</username>

  <password>admin123</password>

</server>

  </servers>

 

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

<version>0.0.1-SNAPSHOT</version>

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

 

 

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

repository标签

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

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

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

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

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

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

相当于pom.xlm配置:

<repository>

  <snapshots>

  <enabled>false</enabled>

  </snapshots>

  <id>central</id>

  <name>Maven Repository Switchboard</name>

  <url>http://repo1.maven.org/maven2</url>

 </repository>

 

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

<repositories>
    <repository>

该镜像的唯一定义符
        <id>nexus</id>
        <name>maven-public</name>

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

 

mirror标签

 

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

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

<mirror>

      <id>nexus</id>

      <mirrorOf>central</mirrorOf>

      <name>local nexus</name>

      <url>http://localhost:8081/repository/maven-public/</url>

</mirror>

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

 

高级镜像配置

 

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

1.<mirrorOf>*</mirrorOf>
匹配所有远程仓库。

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

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

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

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