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

红薯 发布于 2010/04/15 14:47
阅读 7K+
收藏 13

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

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

  1. 网速慢,你可能需要花很长的时间来下载你所需要的jar
  2. 如果你的公司很大,有几百甚至几千人再用Maven,那么这些人都去通过中央仓库来获取jar,那么这是一个很大的资源浪费
  3. 如果存在模块之间的依赖开发,你的snapshot版本是不能够被你的伙伴很方便的获取。
  4. 在实际开发过程中,有些jar的 版本可能在中央仓库里面不存在,或者更新不及时,你是获取不 到这个jar的。

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

  1.  
    1. 这个仓库是本地的,下载的速度是从远程下载不可比的。
    2. 可以为你公司所有的Maven使用者服务,可以进行统一管 理
    3. 后面我会介绍如何通过nexus来进行存在模块依赖的项目的 开发
    4. 你可以添加自己的第三方包。

安装Nexus

我们从http://nexus.sonatype.org/downloads/ 来获取最新版本,目前最新版本为1.3.4

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

 

1Bundle方式安装

解压nexus-webapp-1.3.4-bundle.zip 至任意目录,如D:\tools转 到目录D:\tools\nexus-webapp-1.3.4\bin\jsw\windows-x86-32 ,运行Nexus.bat , 如果你是在linux下安装,那么就下载nexus-webapp-1.3.4-bundle.tar.gz,解压后转到${NEXUS_HOME}/ nexus-webapp-1.3.3\bin\jsw\linux-x86-32,它还支持solaris,macos等操作系统。当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明Nexus启动成功了,然后打开浏览器,访问 http://127.0.0.1:8081/nexus,通 过admin的帐号(admin)和密码 (admin123)登录你会看到如下的页面:

 

如果有新版本发布,会有提示在默认页面上。

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

 

War方式安装

 

你可以同过war的 方式以web应用的形式发布到你的应用服务器,比如tomcat。你所要做的就是下载war版 本的文件,然后放到应用服务器的发布目录即可,这里就不多讲了。

 

到此我们已经安装好Nexus,下面我来介绍下一些我们常用的功能和使用:

 

配置中央仓库

 

先看一下界面:

在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为grouprepository. 这里简单介绍下几种repository的类型:

  • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库
  • proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
  • group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

Maven central是Maven的中央仓库,点击它并选择configuration标签栏,我们会看到下面的页面:

这里有几个项目是我们可能会经常用到的:

  1. Override local storage location: 在这个选项你可以配置你的Nexus本地仓库的存放地址,用来覆盖其默认的存放地址
  2. Remote storage location: 这里是远程仓库的地址,为了提高代理速度,你可以修改为国内的镜像地址。默认值是http://repo1.maven.org/maven2/
  3. Download remote indexes: 这里配置是否下载远程索引文件,模式是false, 建议配置为true, 这样我们便可以通过索引文件来搜索我们需要的构件。

 

添加代理仓库

 

Maven central是一个比较大的代理仓库,如果你需要添加的一个代理仓库,那么可以在点击左边惨淡栏里面的Repositories,然后右边的页 面点击add -> add proxy repository, 之后出现以下页面:

 

填写相关信息保存即可。通常情况下,使用预设的代理仓库已经能够满足大部分 项目的需求了, 只有在特殊需求的情况下才会参加代理仓库.

 

管理本地仓库

 

我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:

  1. Releases: 这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可 以把这个构建发布到NexusReleases本地仓库. 关于符合发布后面会有介绍.
  2. Snapshots: 这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为 你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你 的同伴就可以通过简单的命令来获取和使用这个临时版本.
  3. 3rd Party: 顾名思义, 第三方库, 你可 能会问不是有中央仓库来管理第三方库嘛, 没错, 这里的是指可以让你添加自己的第三方库, 比 如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle JDBC驱 动, 这个时候我们就需要自己添加到3rd party仓库.
  4. 你也可以创建自己的本地仓库,点击Repository面板上方的Add按钮,然后选择Hosted Repository,然 后在下方的配置面板中输入相关信息, 这里我们不再需要填写远程仓库地址,根据自己的需要选择Release或者Snapshot,如图:

 

Maven仓库组

 

仓库组的概念是Maven没 有的,通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们 如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我 们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可.像这样:

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

Nexus中预设了2个仓库组,public repositoriespublic snapshot repositories. 如图:

这个仓库组默认包含本地仓库Releases, snapshots, 3rd party和代理仓库Maven Central. 你可以在Configuration配置页添加仓库到这个仓库组. 如果需要你还可以创建一个仓库组,如图:

点击 Add->Repository Group

出现New Repository Group界面后,填入ID, name 等相关信息, 在 右边Available Repositories 栏里可以选择你要添加的仓库到你新建的仓库组. 

 

 

通过Nexus搜索构件

 

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

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

这样设置以后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以却换到Browse:

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

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

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

比如我们这里选择GAV模 式, 而且我只知道artiface name : testng和版本号5.8, 其他的我不知道, 那么就在artifact version处分别输入testng 5.8 , 搜索结果如下:

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

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

Maven中使用Nexus

   到此为止我们介绍了如何安装和使用Nexus以及其基本配置, 下 面我们介绍下如何让Maven来使用Nexus本地仓库用来替代使用远程仓库. Maven使用Nexus本地仓库只需稍作配置, settings.xml中加入以下代码:

    <profile>

       <id>dev</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>dev</activeProfile>

    </activeProfiles>

 

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

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

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

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

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

.

构件部署

 

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

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

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

第一部分定义文件可以是POM文 件, 这也是比较推荐的方式, 如果没有pom文 件,可以

选择以参数的形式输入.

第二部分是上传构件的实体文件,这里 简单说一下ClassifierExtension, 这两个都是选

填相, Classifier用来区别同功 能的构件用于不同的场景, 比如这个构件是分别针对JDK14

JDK15做了2个功 能一样的Jar, 这个时候你就需要指定这个构件的ClassifierJDK14

还是JDK15. Extension是指 扩展名,如果不提供,那么会自动取这个构件的Packaging Type

作为扩展名, 比如 ear, jar, war 等等. (Packaging Type是在第一步中通过pom文件或者手

工输入得到的)

 

刚才说了3rd party的部署, 关于releases snapshotsUI部署也是一样的操作过程.

我们之前也讲过, 这里 的releasessnapshots是用来部署我们自己的项目构件的, 通过

UI部署是可以,但是不是最高效的, 我们可以通过配置Maven来自动部署我们的项目构

,这也是我们建立自己的仓库的一个非常 重要的原因, 下面就让我们看看如何配置:

首先需要在POM文 件中加入以下代码:

  1. <project>  
  2.   
  3. <distributionManagement>  
  4.   <repository>  
  5.     <id>nexus-releases</id>  
  6.       <name>Nexus Release Repository</name>  
  7.       <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>  
  8.   </repository>  
  9.   <snapshotRepository>  
  10.     <id>nexus-snapshots</id>  
  11.     <name>Nexus Snapshot Repository</name>  
  12.     <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>  
  13.   </snapshotRepository>  
  14. </distributionManagement>  
  15.   
  16. </project>  

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

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

  1. <settings>  
  2.   
  3. <servers>  
  4.   <server>  
  5.     <id>nexus-releases</id>  
  6.     <username>admin</username>  
  7.     <password>admin123</password>  
  8.   </server>  
  9.   <server>  
  10.     <id>nexus-snapshots</id>  
  11.     <username>admin</username>  
  12.     <password>admin123</password>  
  13.   </server>     
  14. </servers>  
  15.   
  16. </settings>

到此为止, 我们 就可以通过命令mvn deploy或者通过IDE的可视化界面点击deploy来发布我们项目到本地仓库了. 通 过这种方式我们可以很方便的进行模块间的依赖开发, 在后面的文章中我会详细介绍如何通过snapshot来让我们的依赖开发变 得简单.

小结

本文介绍了Maven仓 库, 如何通过Nexus建立自己本地仓库, 通过和远程仓库的比较, 我 们知道Nexus给我带来很多方便之处方便我们管理, 方 便我们的项目构件部署, 项目的依赖开发等. 还在等什么, 创 建你自己的仓库吧.

加载中
0
h
hoversong
文中说到的在eclipse中的Maven Indexes 视图,哪儿有啊,我用的eclipse3.5版本,下载的是maven插件,eclipse中只有一个Maven Repositories视图。 我在nexus中设置了仓库组,并把本地的构建添加到仓库组中后,在eclipse中根本找不到这个group下的jar包。
0
潛龍勿用
圖片都是紅叉叉啊。
0
雪梦科技
雪梦科技
哥,图挂了/
0
Sys_0826
Sys_0826

好久之前的帖子啊,需要3.0+的,如何在linux中通过命令来查看相应仓库jar包,以及历史版本之类的信息, 网上搜罗了一圈都没有找到好的资料

返回顶部
顶部