阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nexus入门指南图文教程

279次阅读
没有评论

共计 9661 个字符,预计需要花费 25 分钟才能阅读完成。

Nexus 介绍

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

下载和安装

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

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

 

Bundle 方式安装

解压 nexus-webapp-1.3.0-bundle.zip 至任意目录,如 D:\dev_tools,然后打开 CMD,cd 至目录 D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32,运行 Nexus.bat。你会看到 Nexus 的启动日志,当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明 Nexus 启动成功了,然后打开浏览器,访问 http://127.0.0.1:8081/nexus,你会看到如下的页面:

Nexus 入门指南图文教程

要停止 Nexus,Ctrl+ C 即可,此外 InstallNexus.bat 可以用来将 Nexus 安装成一个 windows 服务,其余的脚本则对应了启动,停止,暂停,恢复,卸载 Nexus 服务。

 

WAR 方式安装

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

 

代理外部 Maven 仓库

登陆

要管理 Nexus,你首先需要以管理员身份登陆,点击界面右上角的 login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容:

Nexus 入门指南图文教程

这里,可以管理仓库,配置 Nexus 系统,管理任务,管理用户,角色,权限,查看系统的 RSS 源,管理及查看系统日志,等等。你会看到 Nexus 的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操作。

 

代理 Maven 中央仓库

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

  • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。
  • proxy,代理仓库,它们被用来代理远程的公共仓库,如 maven 中央仓库。
  • group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置 maven 依赖仓库组。

由此我们知道,我们需要配置一个 Maven 中央仓库的 proxy,其实 Nexus 已经内置了 Maven Central,但我们需要做一些配置。点击仓库列表中的 Maven Central,你会注意到它的 Policy 是 release,这说明它不会代理远程仓库的 snapshot 构件,这是有原因的,远程仓库的 snapshot 版本构件不稳定且不受你控制,使用这样的构件含有潜在的风险。然后我们发现主面板下方有三个 Tab,分别为 Browse,Configuration 和 Mirrors,我们点击 Configuration 进行配置,你现在需要关心的是两个配置项:“Remote Storage Location”为远程仓库的地址,对于 Maven Central 来说是 http://repo1.maven.org/maven2/;“Download Remote Indexes”顾名思义是指是否下载远程索引文件,Maven Central 的该字段默认为 False,这是为了防止大量 Nexus 无意识的去消耗中央仓库的带宽(中央仓库有大量的构件,其索引文件也很大)。这里我们需要将其设置为 True,然后点击 Save。在 Nexus 下载的中央仓库索引文件之后,我们就可以在本地搜索中央仓库的所有构件。下图展示了我们刚才所涉及的配置:

Nexus 入门指南图文教程

 

添加一个代理仓库

这里我们再举一个例子,我们想要代理 Sonatype 的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤如下,在 Repositories 面板的上方,点击 Add,然后选择 Proxy Repository,在下方的配置部分,我们填写如下的信息:Repository ID – sonatype;Repository Name – Sonatype Repository;Remote Storage Location – http://repository.sonatype.org/content/groups/public/。其余的保持默认值,需要注意的是 Repository Policy,我们不想代理 snapshot 构件,原因前面已经描述。然后点击 Save。配置页面如下:

Nexus 入门指南图文教程

 

管理本地 Maven 仓库

Nexus 预定义了 3 个本地仓库,分别为 Releases,Snapshots,和 3rd Party。这三个仓库都有各自明确的目的。Releases 用于部署我们自己的 release 构件,Snapshots 用于部署我们自己的 snapshot 构件,而 3rd Party 用于部署第三方构件,有些构件如 Oracle 的 JDBC 驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中。

当然你也可以创建自己的本地仓库,步骤和创建代理仓库类似,点击 Repository 面板上方的 Add 按钮,然后选择 Hosted Repository,然后在下方的配置面板中输入 id 和 name,注意这里我们不再需要填写远程仓库地址,Repository Type 则为不可修改的 hosted,而关于 Repository Policy,你可以根据自己的需要选择 Release 或者 Snapshot,如图:

管理 Maven 仓库组

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

Nexus 预定义了“Public Repositories”和“Public Snapshot Repositories”两个仓库组,前者默认合并所有预定义的 Release 仓库,后者默认合并所有预定义的 Snapshot 仓库。我们在本文前面的部分创建了一个名为“Sonatype Repository”的仓库,现在将其合并到“Public Repositories”中。

点击仓库列表中的“Public Repositories”,然后选择下方的 ”Configuration” Tab,在配置面板中,将右边“Avaiable Repositories”中的“Sonatype Repository”拖拽到左边的“Ordered Group Repository”中,如图:

Nexus 入门指南图文教程

创建仓库组和创建 proxy 及 hosted 仓库类似,这里不再赘述。需要注意的是 format 字段需要填写“maven2”,添加你感兴趣的仓库即可。

 

搜索构件

在浩大的 Maven 仓库中一下下点击链接,浏览路径以寻找感兴趣的构件是一件很郁闷的事情。Nexus 基于 nexus-indexer 提供构件搜索功能,要想对仓库进行搜索,无论是 hosted,proxy,或者 group,你都必须确认索引文件存在。这一点对于代理仓库尤其重要,有些远程仓库可能根本就没有索引,所以你无法搜索这些代理仓库。有些远程仓库的远程索引非常大,如中央仓库达到了 70M 左右,那么第一次下载索引需要花很多时间,所以要期望得到搜索结果,确保看到如下的文件:

Nexus 入门指南图文教程

一旦你的 Nexus 拥有了本地或者远程仓库的索引文件,你就可以享受 Nexus 的构件搜索功能了。不论登陆与否,你都可以使用关键字进行模糊搜索,比如我在左边导航栏上部的搜索框内输入 junit,然后点击搜索按钮,右边立刻会分页显示 500 多条的 junit 相关构件信息。如果你了解更多的信息,你也可以通过限定 groupId,artifactId,version 进行搜索,点击导航栏中的“Advanced Search”,点击右边所有页面左上角的下拉框,选择“GAV Search”。笔者这里输入 junit:junit:4.4,然后回车:

Nexus 入门指南图文教程

选择一项搜索结果,在页面下方会显示“Artifact Information”的面板,你可以点击 ”artifact” 或者 ”pom” 下载对应文件,而该面板右边更显示了一个 Maven 依赖配置,你可以直接复制该配置到 Maven POM 中,这是个十分方便的特性。

此外,值得一提的是,Nexus 还支持基于 classname 的搜索,你只需点击搜索页面右上角的下拉框,选择“Classname Search”,然后输入类名即可,这里我不再赘述。

 

配置 Maven 使用 Nexus

默认情况下,Maven 依赖于中央仓库,这是为了能让 Maven 开箱即用,但仅仅这么做明显是错误的,这会造成大量的时间及带宽的浪费。既然文章的前面已经介绍了如何安装和配置 Nexus,现在我们就要配置 Maven 来使用本地的 Nexus,以节省时间和带宽资源。

我们可以将 Repository 配置到 POM 中,但一般来说这不是很好的做法,原因很简单,你需要为所有的 Maven 项目重复该配置。因此,这里我将 Repository 的配置放到 $user_home/.m2/settings.xml 中:

<settings>

<profiles>
  <profile>
    <id>dev</id>
    <repositories>
      <repository>
        <id>local-nexus</id>
        <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </repository>
    </repositories>
  </profile>
</profiles>
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>

</settings>

由于我们不能直接在 settings.xml 中插入 <repositories> 元素,这里我们编写了一个 profile,并添加了一个 profile 并使用 <activeProfile> 元素自动将这个 profile 激活。这里的 local-nexus 仓库指向了刚才我们配置的 Nexus 中“Public Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过 <releases> 和 <snapshots> 元素激活了 Maven 对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止 Maven 从 Nexus 下载 snapshot 构件。

 

使用该配置,Maven 就会从你的 Nexus 服务器下载构件了,速度和从 Central 下载可不是一个数量级的。

 

 

 

部署构件至 Nexus

 

Nexus 提供了两种方式来部署构件,你可以从 UI 直接上传,也可以配置 Maven 部署构件。

 

 

 

通过 Nexus UI 部署

 

有时候有个 jar 文件你无法从公共 Maven 仓库找到,但是你能从其它得到这个 jar 文件(甚至是 POM),那么你完全可以将这个文件部署到 Nexus 中,使其成为标准流程的一部分。步骤如下:

 

点击左边导航栏的 ”Repository”,在右边的仓库列表中选择一个仓库,如“3rd Party”,然后会看到页面下方有四个 tab,选择最后一个“Upload”,你会看到构件上传界面。选择你要上传的构件,并指定 POM,(或者手工编写 GAV 等信息),最后点击 Upload,该构件就直接被部署到了 Nexus 的 ”3rd Party” 仓库中。如图:

 

Nexus 介绍

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

下载和安装

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

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

 

Bundle 方式安装

解压 nexus-webapp-1.3.0-bundle.zip 至任意目录,如 D:\dev_tools,然后打开 CMD,cd 至目录 D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32,运行 Nexus.bat。你会看到 Nexus 的启动日志,当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明 Nexus 启动成功了,然后打开浏览器,访问 http://127.0.0.1:8081/nexus,你会看到如下的页面:

Nexus 入门指南图文教程

要停止 Nexus,Ctrl+ C 即可,此外 InstallNexus.bat 可以用来将 Nexus 安装成一个 windows 服务,其余的脚本则对应了启动,停止,暂停,恢复,卸载 Nexus 服务。

 

WAR 方式安装

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

 

代理外部 Maven 仓库

登陆

要管理 Nexus,你首先需要以管理员身份登陆,点击界面右上角的 login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容:

Nexus 入门指南图文教程

这里,可以管理仓库,配置 Nexus 系统,管理任务,管理用户,角色,权限,查看系统的 RSS 源,管理及查看系统日志,等等。你会看到 Nexus 的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操作。

 

代理 Maven 中央仓库

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

  • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。
  • proxy,代理仓库,它们被用来代理远程的公共仓库,如 maven 中央仓库。
  • group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置 maven 依赖仓库组。

由此我们知道,我们需要配置一个 Maven 中央仓库的 proxy,其实 Nexus 已经内置了 Maven Central,但我们需要做一些配置。点击仓库列表中的 Maven Central,你会注意到它的 Policy 是 release,这说明它不会代理远程仓库的 snapshot 构件,这是有原因的,远程仓库的 snapshot 版本构件不稳定且不受你控制,使用这样的构件含有潜在的风险。然后我们发现主面板下方有三个 Tab,分别为 Browse,Configuration 和 Mirrors,我们点击 Configuration 进行配置,你现在需要关心的是两个配置项:“Remote Storage Location”为远程仓库的地址,对于 Maven Central 来说是 http://repo1.maven.org/maven2/;“Download Remote Indexes”顾名思义是指是否下载远程索引文件,Maven Central 的该字段默认为 False,这是为了防止大量 Nexus 无意识的去消耗中央仓库的带宽(中央仓库有大量的构件,其索引文件也很大)。这里我们需要将其设置为 True,然后点击 Save。在 Nexus 下载的中央仓库索引文件之后,我们就可以在本地搜索中央仓库的所有构件。下图展示了我们刚才所涉及的配置:

Nexus 入门指南图文教程

 

添加一个代理仓库

这里我们再举一个例子,我们想要代理 Sonatype 的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤如下,在 Repositories 面板的上方,点击 Add,然后选择 Proxy Repository,在下方的配置部分,我们填写如下的信息:Repository ID – sonatype;Repository Name – Sonatype Repository;Remote Storage Location – http://repository.sonatype.org/content/groups/public/。其余的保持默认值,需要注意的是 Repository Policy,我们不想代理 snapshot 构件,原因前面已经描述。然后点击 Save。配置页面如下:

Nexus 入门指南图文教程

 

管理本地 Maven 仓库

Nexus 预定义了 3 个本地仓库,分别为 Releases,Snapshots,和 3rd Party。这三个仓库都有各自明确的目的。Releases 用于部署我们自己的 release 构件,Snapshots 用于部署我们自己的 snapshot 构件,而 3rd Party 用于部署第三方构件,有些构件如 Oracle 的 JDBC 驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中。

当然你也可以创建自己的本地仓库,步骤和创建代理仓库类似,点击 Repository 面板上方的 Add 按钮,然后选择 Hosted Repository,然后在下方的配置面板中输入 id 和 name,注意这里我们不再需要填写远程仓库地址,Repository Type 则为不可修改的 hosted,而关于 Repository Policy,你可以根据自己的需要选择 Release 或者 Snapshot,如图:

通过 Maven 部署

更常见的用例是:团队在开发一个项目的各个模块,为了让自己开发的模块能够快速让其他人使用,你会想要将 snapshot 版本的构件部署到 Maven 仓库中,其他人只需要在 POM 添加一个对于你开发模块的依赖,就能随时拿到最新的 snapshot。

以下的 pom.xml 配置和 settings.xml 能让你通过 Maven 自动化部署构件:

pom.xml

<project>

<distributionManagement>
  <repository>
    <id>nexus-releases</id>
      <name>Nexus Release Repository</name>
      <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
    <id>nexus-snapshots</id>
    <name>Nexus Snapshot Repository</name>
    <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>

</project>

settings.xml

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

这里我们配置所有的 snapshot 版本构件部署到 Nexus 的 Snapshots 仓库中,所有的 release 构件部署到 Nexus 的 Releases 仓库中。由于部署需要登陆,因为我们在 settings.xml 中配置对应 Repository id 的用户名和密码。

然后,在项目目录中执行 mvn deploy,你会看到 maven 将项目构件部署到 Nexus 中,浏览 Nexus 对应的仓库,就可以看到刚才部署的构件。当其他人构建其项目时,Maven 就会从 Nexus 寻找依赖并下载。

总结

本文介绍强大的仓库管理器——Nexus,包括如何下载安装 Nexus,配置 Nexus 代理中央仓库,管理 Nexus 的代理仓库,本地仓库,以及仓库组。并帮助你了解如何通过 Nexus 搜索构件。最后,如何在 Maven 中配置 Nexus 仓库,以及如何部署构件到 Nexus 仓库中。这些都是 Nexus 中最基本也是最常用的功能。随着使用的深入,你会发现 Nexus 还有很多其它的特性,如用户管理,角色权限管理等等。

Nexus 的 OSS 版本是完全开源的,如果你有兴趣,你可以学习其源码,甚至自己实现一个 REST 客户端。

马上拥抱 Nexus 吧,它是免费的!

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9661字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中