文档章节

Nexus&Maven连接使用笔记

墨绿红晨
 墨绿红晨
发布于 2016/02/23 14:58
字数 4314
阅读 43
收藏 0
点赞 1
评论 0

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系统,管理任务,管理用户,角色,权限,查看系统的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)了。

 

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

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

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

 

 

3、管理资源库

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

 

  

 

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 搜索构件

在我们实际使用构件的过程中通常遇到一个问题,有时候我紧紧知道我所需要的构建的大致名字,并不知道全称或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文件中使用,这是个非常实用的功能:


 

 

六、更新仓库索引

1)强制更新索引

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

·         以管理员身份登录

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

    

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

    

2)定时更新索引

·         以管理员身份登录

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

    

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

    

·         任务类型选择: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服务器地址。


© 著作权归作者所有

共有 人打赏支持
墨绿红晨
粉丝 2
博文 1
码字总数 4314
作品 0
广州
程序员
win7---笔记本(无线网)连接台式机(有线网)

由于工作需要,要使用以前做过的项目的资料,但是资料不在自己工作的电脑上,在自己日常使用的笔记本上,于是将其带到公司,进行台式机远程桌面控制笔记本,方便读取资料, 网上差了一些资料...

durban
2012/02/29
0
0
Kindle笔记导出工具--KindleNote

[TOC] KindleNote 简介 KindleNote 可以使你 KindleNote 阅读器中的笔记变得更易阅读。 我们通过对 KindleNote的笔记文件进行整理、分析,使得笔记片段合并为完整笔记。 你可以用 KindleNote...

杜小豆
2016/05/15
762
0
ESP8266笔记汇总

一、前言 2015年开始,随着ESP8266的横空出现,WiFi SoC大幅降价,市场模组价格一下被拉到了10元档。WiFi由于可直接入网的,在智能家居等行业中成为了应用最广泛的物联网技术。本尊贵为物联网...

iotisan
2017/02/03
0
0
【CentOS 7笔记5】,主机互相登陆#171019

hellopasswd --- 一. 克隆虚拟机 VMware在管理中找到克隆并且克隆主机,将修改主机名和ip地址 2. 二. 两台linux互相登陆 1. 修改配置 为确保是否成功连接对方主机,使用vi /etc/hostname修改...

hellopasswd
2017/10/26
0
0
TCP/IP实时通信相关协议

一步一步学WebSocket (一) 初识WebSocket 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端 .NET 的 WebSocket 开发包比较 Websocket全讲解。跨平台的通讯协议!!基于websocket...

boonya
2016/05/10
93
0
12月13日笔记 远程连接Centos7系统

一、当日直播答疑要点 Step1、相关软件下载地址Putty:https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.70-installer.msi 下载安装版,已经包含了所有必要组件,直接安装,简...

whytl
2017/12/14
0
1
Lind.DDD.Repositories.Redis层介绍

之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席之地,作为当今最红...

mcy247
2017/12/07
0
0
ubuntuvim/ape-note

ape-note 一个异常简洁的笔记应用,一个让你爱不释手的笔记应用,遇上我是你的荣幸。 项目安装 后2条命令用于安装项目所依赖的插件,这个过程可能比较慢,主要原因是要从外国的服务器上下载文...

ubuntuvim
2017/06/29
0
0
到底是购买WindowsX86平板方便还是Android平板呢?

平时SSH连接到服务器上,或者使用VPN、RDP等软件连接到VPS上,然后是看各种格式的CHM手册 PDF电子书等。 然后是使用各种网络工具如网络嗅探、端口扫描等应用工具。 然后是使用各种学习工具如...

eechen的粉丝
2014/02/08
578
5
NodeMCU学习笔记之初始化工作

NodeMCU学习笔记之初始化工作 丛林听雨2016-11-04132 阅读 工作初始化 NodeMCU是一个开源的可以运行脚本的微控制器,直接支持WiFi链接和GPIO,而且成本低廉。是物联网开发的不二之选。板子是...

丛林听雨
2016/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git GUI Client

Git GUI Client   这里我们为大家收藏了众多Git的GUI客户端,下载请点击这里

qwfys
8分钟前
0
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
11分钟前
2
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
18分钟前
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
32分钟前
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 #!/usr/bin/expectset passwd "123456"spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/expect {"yes...

lyy549745
33分钟前
0
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
41分钟前
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
45分钟前
1
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0
nginx负载均衡

一、nginx 负载均衡 拓扑图: 主机信息: 1、负载均衡器1(lb1):192.168.10.205 RHEL7.5 2、负载均衡器2(lb2):192.168.10.206 RHEL7.5 3、web服务器1(web01):192.168.10.207 Centos...

人在艹木中
昨天
0
0
做了一个小网站

做了一个小网站 www.kanxs123.com

叶落花开
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部