`
wusuoya
  • 浏览: 641301 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

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

 
阅读更多

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: 顾名思义, 第三方库, 你可 能会问不是有中央仓库来管理第三方库嘛, 没错, 这里的是指可以让你添加自己的第三方库, 比 如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到OracleJDBC驱 动, 这个时候我们就需要自己添加到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给我带来很多方便之处 方便我们管理, 方 便我们的项目构件部署, 项目的依赖开发等. 还在等什么, 创 建你自己的仓库吧.

分享到:
评论

相关推荐

    使用nexus 搭建 maven 本地仓库

    在软件开发过程中,Maven作为Java项目管理工具,依赖于大量的第三方库,这些库通常存储在Maven中央仓库。然而,频繁地从远程仓库下载...在大型企业环境中,Nexus作为企业级仓库管理解决方案,更是不可或缺的一部分。

    Nexus 私服之三“Maven 与 Nexus 协同工作”

    总结来说,通过正确配置Maven的settings.xml,我们可以利用Nexus作为Maven的代理和发布仓库,从而提升开发团队的工作效率,保证构建的一致性和可靠性。同时,Nexus提供的版本管理和权限控制等功能,对于大型企业级...

    Windows 下Nexus搭建Maven私服

    ### Windows 下 Nexus 搭建 Maven 私服详解 #### 一、为什么使用 Nexus 在软件开发过程中,尤其是...通过以上步骤,就可以成功搭建并配置好基于 Windows 的 Nexus Maven 私服,有效提升团队开发效率及资源利用率。

    maven nexus私服构件示例

    此外,Nexus还提供了高级功能,如版本控制、权限管理、搜索和报表,对于大型团队和企业级项目尤其重要。 总之,Maven Nexus私服构件示例是一个很好的学习资源,它涵盖了Maven仓库管理的基础和实践,帮助开发者提升...

    maven+nexus学习帮助

    4. **Nexus**:Nexus作为企业级的Maven仓库管理器,它可以帮助团队有效地管理依赖,避免网络延迟和重复下载。Nexus提供了三种类型的仓库:本地仓库(Local Repository)用于存储本地构建产生的工件,远程仓库...

    在CentOS下使用nexus搭建maven私服的安装教程

    随着企业级项目规模的不断扩大和技术栈的日益复杂,如何有效地管理项目中的依赖成为了一个重要的问题。Maven作为Java生态中最流行的构建工具之一,通过其强大的依赖管理和项目构建能力,极大地简化了这一过程。然而...

    nexus使用+Maven仓库管理

    ### Nexus使用与Maven仓库管理详解...总之,Nexus与Maven仓库管理的结合,为企业级项目提供了高效、安全的构件存储和分发解决方案,通过细致的权限控制和灵活的仓库管理策略,大大提升了软件开发和部署的效率与安全性。

    nexus-2.7.0-bundle-maven仓库搭建.rar

    "架构" 这个标签暗示了Nexus在软件开发中的重要地位,它有助于构建和维护企业级的软件架构,确保组件的一致性和可重复使用性。 在Nexus 2.7.0版本中,我们可以期待以下功能: 1. **仓库管理**:Nexus支持多种类型的...

    maven 私服 nexus3 安装包

    Maven 私服 Nexus3 是一个企业级的仓库管理工具,它允许开发团队集中管理和分发软件构件,包括 Maven 的 JAR 包、NPM 包、Gradle 构件等。在进行大型项目开发时,私有 Maven 仓库能够提高构建速度,降低对公网依赖,...

    Maven nexus 安装包

    总结来说,Maven Nexus 是企业级 Maven 构建环境的理想选择,通过其丰富的功能和管理能力,可以显著提升开发团队的工作效率和软件质量。正确安装并配置 Maven Nexus,能够为企业构建流程带来极大的便利。

    Maven私服nexus安装包

    Nexus是Sonatype公司开发的一款优秀的Maven私服,它不仅提供Maven仓库管理功能,还支持其他如npm、RubyGems等多类型仓库,是企业级软件开发的首选工具。Nexus分为几个主要部分:托管仓库(Hosted Repositories)、...

    maven-nexus

    Maven Nexus 是一个企业级的 Maven 仓库管理器,它扩展了 Maven 的本地仓库功能,提供了对 Maven 依赖管理的集中化和优化。Nexus 提供了对 Maven 仓库的全面控制,包括代理远程仓库、存储库组、虚拟存储库以及构建和...

    nexus maven

    Nexus是Sonatype公司开发的一款强大的 Maven仓库管理器,它被广泛用于企业级的Maven构建和依赖管理。Nexus不仅作为一个中央存储库,还提供了对内部和外部依赖的集中控制,增强了软件供应链的效率和安全性。在Linux...

    使用Maven&nexus上传下载至私库

    在企业级软件开发中,为了提高团队协作效率、确保依赖管理的安全性以及减少对外部网络的依赖,通常会搭建一个私有的Maven仓库。本文将详细介绍如何使用Nexus作为私有仓库,并结合Maven配置实现项目的依赖管理和构建...

    【maven】Nexus使用

    【maven】Nexus使用 Maven Nexus是一个强大的仓库管理器,它可以帮助开发人员管理和分发Java项目构建的依赖项、构件以及内部工件。...无论是个人项目还是大型企业级应用,Nexus都是一个不可或缺的工具。

    maven和nexus文档

    而Nexus则是一个企业级的仓库管理器,用于存储、管理和分发各种软件组件,如JAR文件和其他类型的构建工件。 【Maven】: 1. Maven架构:Maven基于项目对象模型(Project Object Model, POM)来管理项目。POM包含了...

    nexus-maven

    在标题“nexus-maven”中,我们可以推断这是关于如何配置和使用Nexus作为Maven的本地或企业级仓库的教程。它可能涵盖了设置、部署、检索依赖以及维护库的实践指导。 描述中提到,“里面包含了一个nexus和一个详细的...

    apache-maven-nexus.zip

    它是企业级软件开发中的重要组成部分,特别是在Java生态系统中,因为它可以帮助开发者有效地管理和分发软件构建工件。 Nexus作为Java私服服务,其主要功能包括: 1. **本地仓库管理**:Nexus提供了一个统一的界面...

    Mac maven3.6 + nexus3.16.zip

    接下来,Nexus是Sonatype公司开发的一款企业级的 artifact 管理器,它可以作为一个私有的Maven仓库,用于存储、管理和分发软件构件。Nexus不仅支持Maven,还支持npm、Gradle等其他构建工具的仓库管理。在团队协作...

    Windows中Maven仓库管理工具:Nexus

    Nexus是Sonatype公司推出的一款强大的Maven仓库管理工具,尤其适合企业级项目和团队协作。 标题中的“Windows中Maven仓库管理工具:Nexus”指出,Nexus可以在Windows操作系统上运行,为开发者提供便捷的Maven仓库...

Global site tag (gtag.js) - Google Analytics