为什么要用远程仓库(私服)

如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件,这样就加大了中央仓库的负载和浪费了外网的带宽,如果网速慢的话还会影响项目的进程。为团队创建私服,可以让公司的团队共享一套构件,加快了项目搭建的进程。所以我们选择用Nexus创建私服。

Nexus下载

下载地址:http://www.sonatype.org/nexus/go

Nexus安装

(1)解压

$ tar zxvf nexus-2.1.2-bundle.tar.gz

(2)移动到其他目录

$ mv nexus-2.1.2 /home/nexus

(3)进入nexus的bin目录下

$ cd /home/nexus/bin

(4)执行命令启动服务

$  ./nexusstart

(5)执行命令停止服务

$  ./nexusstop

Nexus浏览

启动服务之后,浏览器中输入:http://127.0.0.1:8081/nexus/,默认用户名和密码是admin和admin123.出现如图所示运行成功:

Nexus仓库类型介绍

nexus的仓库类型分为以下四种:

group:仓库组,用了合并多个hosted/proxy仓库,当你的项目希望多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

hosted:宿主,本地仓库,通常我们会部署自己的构建到这一类仓库。

proxy:代理仓库,通常被用来代理远程的公共仓库,如maven中央仓库。

virtual:虚拟

主要介绍一下三个本地仓库:

  • Releases:用来部署管理内部的发布版本构件的宿主类型仓库,这里存放我们自己项目中发布的构建,通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war,我们就可以把这个构建发布到Nexus的Releases本地仓库。
  • Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库,它的目的是让我们可以发布那些非release版本, 非稳定版本,比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发,那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本。
  • 3rd Party:无法从公共仓库获得的第三方发布版本的构件仓库,比如有些构件在中央仓库是不存在的.比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。

下载索引

nexus索引好比目录,只要我们更新好索引,就可以在nexus系统中去查找,下载我们需要的jar包,并且对应的groupId,artifactId,version都可以方便的查到。如图:

刚刚搭建的nexus,索引会是空的,所以需要我们去下载索引。下载索引有两种方式。

第一种:在线下载索引。把Centra仓库,点击仓库下面的configuration下把DownloadRemote Indexes修改为true。如下图:

然后在Central仓库上右击,选择Pepari Index,这样Nexus就会去下载索引文件。

第二种:离线下载索引。

由于索引文件很大,在线下载会很漫长,所以采用离线下载会很快。从网上找到一个nexus索引仓库包下载下来,如图:

下载完成以后解压,把文件夹中的东西拷贝到sonatype-work/nexus/indexer/central-ctx下面:

重新启动一下nexus。

能够很快的把索引下载过来。如图:

如果中间添加了新的jar包想更新索引,点中右击update index就行了。如图:

项目中配置Nexus仓库(maven的setting.xml文件配置)

配置maven从nexus下载构件:

<profiles>
<profile>
<id>nexusProfile</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://nexus.m2plat.cn/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://nexus.m2plat.cn/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexusProfile</activeProfile>
</activeProfiles>

该配置中使用了一个id为nexusProfile的profile,这个profile包含了相关的仓库配置,同事配置中又使用了activeProfile元素将这个profile激活,这样当执行maven构件的时候,激活的profile会将仓库配置应用到项目中去。

配置镜像让maven只使用私服:

<!--maven对全部仓库的访问全部拦截到私服的public仓库中去,如果私服关闭,那么久不能访问中央工厂了-->
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Local Repository</name>
<url>http://127.0.0.1:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>

配置后本机所有的Maven项目都会从nexus私服下载构件。

配置maven部署构件到nexus:

<!-- 项目部署到私服配置 -->
<distributionManagement> <!-- 远程部署管理信息 -->
<repository> <!--部署项目产生的构件到远程仓库需要的信息 -->
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository> <snapshotRepository> <!-- 如果没有配置该元素,默认部署到repository元素配置的仓库 -->
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>

nexus仓库对匿名用户是只读的,所以为了能够部署构件,还需要在setting.xml文件中配置认证信息:

<!--私服的验证信息-->
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>

配置好以后,就可以通过maven的deploy命令,将项目的jar包部署到Nexus上,供其他项目组模块使用。大大加快了项目组的开发效率。

参考:

《maven实战》

【maven基础】maven私服搭建和使用

Maven学习笔记—私服(包含maven的setting.xml配置)的更多相关文章

  1. maven -- 学习笔记(二)之setting.xml配置说明(备忘)

    setting.xml配置说明,learn from:http://pengqb.javaeye.com,http://blog.csdn.net/mypop/article/details/6146 ...

  2. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  3. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  4. Maven学习笔记(三) :Maven使用入门

    编写POM:      Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描写叙述项目怎样构建,声明项目依赖,等等.   ...

  5. Maven学习笔记-03-Eclipse和Maven集成

    本文使用 Eclipse 集成 Maven,并创一个基于 maven的web工程 一 环境版本信息 本文使用的版本信息如下: Eclipse Version: Mars.1 Release (4.5. ...

  6. Maven学习笔记(十二)-maven打包之resource配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011781521/article/details/79052725 一.简介 构建Maven项目的 ...

  7. Maven学习笔记(二) :Maven的安装与配置

    在Windows上安装Maven:    1.  首先检查安装JDK 通过命令行运行命令:echo %JAVA_HOME%和 java  -version,能够查看当前java的安装文件夹及java的 ...

  8. Maven学习笔记5:Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...

  9. maven学习笔记一(认识maven)

    mavn是什么? Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务.Maven是跨平台的. ...

随机推荐

  1. JSON资料整理(转载)

    目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON 原始方式 通用方式 内置方式 契约方式 通过序列化将. ...

  2. RabbitMQ系列一

    1.http://www.erlang.org/downloads 下载一个比教新的版本(otp_win64_20.2.exe) 2.http://www.rabbitmq.com/install-w ...

  3. Sqlserver 批量数据更改

    insert into AAA select GETDATE(),name from BBB where aid=0 update a set a = b.a,b=b.b,c=b.c from t a ...

  4. [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑

    好吧题目非常easy.可是有些细节还是挺有意思的. 题目是:计算今年是否是闰年,推断闰年条件,满足年份模400为0,或者模4为0可是模100不为0 答案是这种: import time #计算今年是否 ...

  5. shell编程sed笔记

    源文件的内容 <modules> <module name="provider"> <!--发布模式--> <bds_mode/> ...

  6. SQLServer 批量备份与还原

    备份与还原是数据库避不开的主题,而作为DBA,经常会面临将一台机器上的所有数据库重新构建到一台新机器上的要求: 在现在都讲究自动化管理的时代,传统的界面操作备份还原的做法不仅浪费时间和精力,而且还很容 ...

  7. python3----模块(序列化(json&pickle)+XML+requests)

    一.序列化模块 Python中用于序列化的两个模块: json     跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle   python内置的数据 ...

  8. Android实例-多窗口的切换

    Android实例-多窗口的切换 1.图片一是程序运行后的界面. 2.图片二是点击"非模态显示"的界面. 3.图片三是点击"模诚显示"的界面(提示平台不支持). ...

  9. Python基础——原生数据类型(字典,列表,元组,字符串)

    字典Dictionary 字典定义了键值对的1对1管理. 1.定义字典 请看下面的栗子,我们先创建了一个具有两个元素的字典,每对都是key:value的形式. 我们能通过key得到value,但是不能 ...

  10. 推荐一个CSS类库

    animate.css 一个封装好的动画效果类