Nexus&Maven连接使用笔记

Nexus入门

一、Nexus介绍

Nexus Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjsREST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

 

二、利用 Nexus 来构建企业级 Maven 仓库

NexusMaven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块间的高效依赖开发,下面会一一描述。

虽然你可以通过中央仓库来获取你所需要的jar包,但是现实往往是存在很多问题:

 

1、网速慢,你可能需要花很长的时间来下载你所需要的jar

2、如果你的公司很大,有几百甚至几千人再用Maven,那么这些人都去通过中央仓库来获取jar,那么这是一个很大的资源浪费

3、如果存在模块之间的依赖开发,你的snapshot版本是不能够被你的伙伴很方便的获取。

在实际开发过程中,有些jar的版本可能在中央仓库里面不存在,或者更新不及时,你是获取不到这个jar的。

 

所有以上问题,通过Nexus这个日益流行的仓库管理器可以轻松的解决。

 

1、这个仓库是本地的,下载的速度是从远程下载不可比的。

2、可以为你公司所有的Maven使用者服务,可以进行统一管理

3、通过nexus来进行存在模块依赖的项目的开发

4、你可以添加自己的第三方包。

 

三、下载和安装

你可以从http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,笔者使用的是2.11.3版本。

注意nexus2.6版本开始就不支持jdk1.6了,支持 jdk1.7以上版本的。

Nexus提供了两种安装方式,一种是内嵌Jettybundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。

 

1、Bundle方式安装

解压nexus-2.11.3-01-bundle.zip 至任意目录,如F:\nexus-2.11.3-01-bundle

F:\nexus-2.11.3-01-bundle 下有解压后的两个文件夹,nexus-2.11.3-01sonatype-work

nexus-2.11.3-01nexus的安装目录,sonatype-work为包含有所有资源库和Nexus的配置信息。

F:\nexus-2.11.3-01-bundle\nexus-2.11.3-01\bin\jsw在这个目录下,有许多Nexus运行的平台可供选择。我用的是windows x 64系统,所以选择windows-x86-64的平台,进到目录以后,可以看到有许多批处理文件,如果是第一次运行,首先运行install-nexus.bat批处理程序,将其安装为Windows服务,然后运行start-nexus.bat批处理程序,启动Nexus服务器。

 

2、WAR方式安装

你需要有一个能运行的web容器,这里以Tomcat为例,加入Tomcat的安装目录位于D:\dev_tools\apache-tomcat-6.0.18 ,首先我们将下载的nexus-2.11.3-01-bundle.war 重命名为nexus.war ,然后复制到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,然后启动CMDcdD:\dev_tools\apache-tomcat-6.0.18\bin\ 目录,运行startup.bat 。一切OK,现在可以打开浏览器访问http://127.0.0.1:8080/nexus,你会得到和上图一样的界面。

 

 

四、Nexus配置

Nexus启动成功后,打开浏览器,访问http://localhost:8081/nexus

 

1、登录

管理仓库需要先登录,单击页面右上角的【log in】链接,默认登录用户名/密码是admin/admin123。登录后就可以看到左栏菜单的管理项。

                                              Nexus&Maven连接使用笔记_第1张图片

这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。

 

2仓库管理


点击左边导航栏的Repositories,界面的主面板会显示所有一个所有仓库及仓库组的列表,你会看到它们的Type字段的值有grouphostedproxyvirtual。这里我们不关心virtual,只介绍下另外三种类型:

·         hosted,本地代理仓库,通常我们会部署自己的构件到这一类型的仓库。

·         proxy,代理的远程仓库,它们被用来代理远程的公共仓库,如maven中央仓库。

·         group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。

·          

Nexus代理三个重要的远程资源库:Maven Central资源库、Apache Snapshot资源库和Codehaus Snapshot资源库。每个远程资源库都包含有成千上万的artifact,全部下来是不切实际的。所以Nexus中只维护它们的索引,使用这些索引来 搜索artifact,需要的时候再下载内容。不过默认情况下是禁止下载这些索引的,这就需要通过配置允许下载索引。步骤如下:

在左侧栏中,选择【Views/Repositories|Repositories】,右侧会打开用户管理的资源列表。找到上述的三个远程资源库,在下方的属性窗口,将“Download Remote Indexes”设为“true”,并保存修改。

Download remote indexes: 这里配置是否下载远程索引文件,模式是false, 建议配置为true,在Nexus下载远程资源库索引文件之后,我们就可以在本地搜索远程资源库的所有构件(artifact)了。

Nexus&Maven连接使用笔记_第2张图片

 

还有两个配置是我们可能会经常用到的:

1Override local storage location: 在这个选项你可以配置你的Nexus本地仓库的存放地址,用来覆盖其默认的存放地址

2Remote storage location: 这里是远程仓库的地址,为了提高代理速度,你可以修改为国内的镜像地址。默认值是http://repo1.maven.org/maven2/

 

 

3、管理资源库

在左侧栏中,选择【Views/Repositories|Repositories】,右侧会打开用户管理的资源列表。在最上面一栏,我们可以更新、添加和删除资源库。如下图:

 

Nexus&Maven连接使用笔记_第3张图片  

 

Nexus预定义了3个本地仓库,分别是Releases(发布) Snapshots(快照) 3rd Party

 

Releases: 这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到NexusReleases本地仓库. 关于符合发布后面会有介绍.

 

Snapshots: 这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本。

 

3rd Party: 顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛, 没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle JDBC驱动, 这个时候我们就需要自己添加到3rd party仓库。

 

4、管理Maven仓库组

Nexus中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一 样的,我只管根据groupIdartifactIdversion等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓 库,hosted或者proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。

Nexus预定义了“Public Repositories”仓库组,默认合并所有预定义的Release仓库。

点击列表中的“Public Repositories”,然后选择下方的"Configuration" Tab,在配置面板中,将右边“Avaiable Repositories”中的资源库移动到左边的“Ordered Group Repository”中即可,如图:

Nexus&Maven连接使用笔记_第4张图片 

 

五、通过 Nexus 搜索构件

在我们实际使用构件的过程中通常遇到一个问题,有时候我紧紧知道我所需要的构建的大致名字,并不知道全称或group id, 这是件非常头疼的事情. Nexus基于Nexus indexer的搜索功能帮我们解决了这个问题.

要是用搜索功能, 必须要有索引文件, Nexus默认是不建立索引文件的,因为像中央仓库这样的索引文件的建立需要耗费比较大的网络资源,仅索引文件就要几十兆. 要开启中央仓库的索引文件下载功能需要在Maven Central的配置页面, Download Remote Indexes选择true. 如图:
Nexus&Maven连接使用笔记_第5张图片

这样设置以后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以却换到Browse:
Nexus&Maven连接使用笔记_第6张图片

如果出现先以上文件夹,那说明索引文件已经建立.

下面我试一下搜索功能, 在左边菜单栏里面有个Artifact Search, 在输入框里面输入你想要搜索的构件名字,比如: testing, 那么查询结果如下:

Nexus&Maven连接使用笔记_第7张图片

这是模糊查询的结果,当然如果你知道更多信息,比如版本号等,你可以使用高级搜索,点击高级搜索后,右边界面会提供集中搜索方式:keyword, classname, GAV, checksum

Nexus&Maven连接使用笔记_第8张图片
比如我们这里选择GAV模式, 而且我只知道artiface name : testng和版本号5.8, 其他的我不知道, 那么就在artifact version处分别输入testng 5.8 , 搜索结果如下:


你如果你不知道知道构件的名称, 只知道classname, 那么你也可以通过class name 的方式搜索,这里就不再赘述

当你选择一项搜索结果,在页面的下方会出现这个构件的详细信息, 并且会列出这个构件的Maven依赖配置, 你可以直接拷贝到你的pom文件中使用,这是个非常实用的功能:


Nexus&Maven连接使用笔记_第9张图片

 

 

六、更新仓库索引

1)强制更新索引

nexus索引经常会出现与远程仓库索引不一致的情况,导致某些包不能正常下载,可以强制更新仓库索引,保持索引同步:

·         以管理员身份登录

·         右键点击仓库,选择Expire Cache

    Nexus&Maven连接使用笔记_第10张图片

·         右键点击仓库,选择Update Index

    Nexus&Maven连接使用笔记_第11张图片

2)定时更新索引

·         以管理员身份登录

·         左侧导航栏选择Administration->Scheduled Tasks

    Nexus&Maven连接使用笔记_第12张图片

·         点击add添加一个计划任务

    Nexus&Maven连接使用笔记_第13张图片

·         任务类型选择:Update Repositories IndexRepository/Group选择要更新的仓库,Recurrence选择计划任务的周期类型

 

七、上传构件部署

1、通过Nexus的UI上传

有些时候我们需要部署构件到Nexus3rd party, 比如我们在中央仓库找不到我们需要的构件, 我们可以通过NexusUI来上传构件:

点击左边菜单栏的 Repositories, 然后点击右边界面的3rd party, 选择界面下方的Artifact Upload, 这个时候出现以下界面:

上传构件需要两个步骤,一个是定义文件的上传,再就是构件的实体文件.

第一部分定义文件可以是POM文件, 这也是比较推荐的方式, 如果没有pom文件,可以选择以参数的形式输入.

第二部分是上传构件的实体文件,这里简单说一下ClassifierExtension, 这两个都是选填相, Classifier用来区别同功能的构件用于不同的场景, 比如这个构件是分别针对JDK14JDK15做了2个功能一样的Jar, 这个时候你就需要指定这个构件的ClassifierJDK14还是JDK15. Extension是指扩展名,如果不提供,那么会自动取这个构件的Packaging Type作为扩展名, 比如 ear, jar, war 等等. (Packaging Type是在第一步中通过pom文件或者手工输入得到的)

 

2、通过配置Maven来自动部署我们的项目构件

刚才说了3rd party的部署, 关于releases snapshotsUI部署也是一样的操作过程.我们之前也讲过, 这里的releasessnapshots是用来部署我们自己的项目构件的, 通过UI部署是可以,但是不是最高效的, 我们可以通过配置Maven来自动部署我们的项目构件,这也是我们建立自己的仓库的一个非常重要的原因, 下面就让我们看看如何配置:首先需要在POM文件中加入以下代码:

 

 

<project>   

   

<distributionManagement>   

  <repository>   

    <id> nexus-releases</id>   

      <name> Nexus Release Repository</name>   

      <url> http://127.0.0.1:8081/nexus/content/repositories/releases/</url>   

  </repository>   

  <snapshotRepository>   

    <id> nexus-snapshots</id>   

    <name> Nexus Snapshot Repository</name>   

    <url> http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>   

  </snapshotRepository>   

</distributionManagement>   

   

</project>    

这里配置,Maven知道当我要发布release版本或者snapshot版本是需要发布到哪个地址.

然后我们需要在setting.xml里面配置一下Nexus的帐号和密码:

<settings>   

   

<servers>   

  <server>   

    <id> nexus-releases</id>   

    <username> admin</username>   

    <password> admin123</password>   

  </server>   

  <server>   

    <id> nexus-snapshots</id>   

    <username> admin</username>   

    <password> admin123</password>   

  </server>      

</servers>   

   

</settings>

到此为止, 我们就可以通过命令mvn deploy或者通过IDE的可视化界面点击deploy来发布我们项目到本地仓库了. 通过这种方式我们可以很方便的进行模块间的依赖开发。

 

八、修改Nexus监听端口

默认情况下,Nexus监听端口8081。可以通过以下方法更改这个端口。

·         停止Nexus

·         编辑Nexus安装目录下的conf\ nexus.properties文件,修改applicationPort的值

F:\nexus-2.11.3-01-bundle\nexus-2.11.3-01\conf\ nexus.properties文件

·         重启Nexus

 

 

 

Maven连接Nexus

一、Maven 仓库

Maven 仓库的两个概念:本地仓库和远程仓库

 

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。

 

Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml 配置这个地址:

<settings>   

  …   

  <localRepository> D:/java/repository</localRepository>   

  …   

</settings>   

 

如果你想让所有的用户使用统一的配置那么你可以修改Maven主目录下的setting.xml:

${M2_HOME}/conf/setting.xml

 

二、在 Maven 中使用 Nexus

1、profile& activeProfiles定义

Maven使用Nexus本地仓库只需稍作配置, mavensettings.xml中加入以下代码:

<profile>

       <id>nexus</id>

          <repositories>

             <repository>

                 <id>nexus</id>

                 <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>

                 <releases>

                    <enabled>true</enabled>

                 </releases>

                 <snapshots>

                    <enabled>true</enabled>

                 </snapshots>

              </repository>

            </repositories>           

            <pluginRepositories>

                <pluginRepository>

                    <id>nexus</id>

                    <url>http://127.0.0.1:8081/nexus/content/groups/public</url>

                    <releases>

                        <enabled>true</enabled>

                    </releases>

                    <snapshots>

                        <enabled>true</enabled>

                   </snapshots>

                </pluginRepository>

            </pluginRepositories>

        </profile>

    </profiles>

 

    <activeProfiles>

        <activeProfile>nexus</activeProfile>

    </activeProfiles>

 

 

这里配置了repositorypluginRepository, Maven在使用第三方构件和插件时是分开来配置的,所以如果我们也希望插件的下载也通过我们的本地仓库来下载,那么我们就需要配置pluginRepository.

url就是我们之前安装的Nexus的地址, 这个地址可以是你们公司局域网内部的一台仓库服务器.

 

<releases> <enabled>true</enabled></releases>这个标签的作用是设定是否允许下载

release版本的载构件, 同样snapshots标签可以设定是否允许下载snapshot版本的构件.

通常,我们不建议下载snapshot版本的构件,因为它是不稳定的版本, 除非你有特殊的需求

 

在上面的文件中,我们定义了一个单一的profilenexus。配置这个nexus profile用来使用   http://127.0.0.1:8081/nexus/content/groups/public URL从中央资源库下载。这个URL被同一settings.xml文件中的镜像设置所覆盖,并指向我们的单一Nexus组的URL。然后在activeProfiles元素中列出该nexus组作为一个活动的profile

 

2、mirror定义

再定义个Mirror 镜像,这个mirror配置会覆盖默认的中央仓库地址http://repo1.maven.org/maven2/

<mirrors>

       <mirror>

              <id>nexusc</id>

              <mirrorOf>*</mirrorOf>

              <name>Nexus</name>

              <url>http:// 127.0.0.1:8081/nexus/content/groups/public/</url>

       </mirror>

</mirrors>

 

url都改成对应你的nexus服务器地址。


你可能感兴趣的:(maven,nexus)