Ubuntu 14使用Nexus2.x为Maven3.x搭建私服构件仓库

一、下载与安装Nexus

想为Maven搭建私服,我们可以选择使用Nexus工具,目前已知提供war包的版本为2.2.0,其下载地址为:http://www.sonatype.org/nexus/go

39e36edc-a0d2-3b49-afd8-d0e4a175eb5a

这里我们下载War包,直接部署到Tomcat 7 下面,Ubuntu 下面是 /var/lib/tomcat7/webapps。
接下来我们可以在浏览器中输入http://127.0.0.1:8080/nexus/查看Nexus是否成功.

如果提示错误,则到 /var/log/tomcat7/localhost.YYYY-MM-DD.log 下面查看日志,有可能报告 /usr/share/tomcat7/sonatype-work 权限问题,则说明Nexus 没有权限创建这个目录,因此我们需要手工创建这个目录,然后赋予这个目录 777权限,然后重启 Tomcat.

目前最新的版本Nexus 2.12.0-01,(Nexus OSS官网下载2.x的Tomcat/WAR版本) 。3.x版本已经不提供WAR包下载了,只能是使用Jetty的版本了。

Ubuntu下面的操作如下:

$ cd ~

$ wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.12.0-01-bundle.tar.gz

$ sudo mkdir /var/opt/nexus-2.12.0-01

$ sudo tar -zxvf nexus-latest-bundle.tar.gz -C /var/opt/nexus-2.12.0-01

$ sudo ln -s /var/opt/nexus-2.12.0-01/nexus-2.12.0-01/ /var/opt/nexus

修改bin/jsw/conf/wrapper.conf,设置wrapper.java.command=jdk所在目录/bin/java

$ whereis java
java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz

$ sudo vim /var/opt/nexus/bin/jsw/conf/wrapper.conf

修改后的内容如下:

..........
wrapper.java.command=/usr/bin/java
..........

设置目录的权限

$ chmod -R 777 /var/opt/nexus-2.12.0-01/sonatype-work

$ chmod -R 777 /var/opt/nexus/logs

$ chmod -R 777 /var/opt/nexus/tmp

$ chmod -R 777 /var/opt/nexus/bin/jsw/linux-x86-64

$ chmod -R 777 /var/opt/nexus/bin/jsw/linux-x86-32

启动服务

$ /var/opt/nexus/bin/nexus start

Starting Nexus OSS...
Started Nexus OSS.

这种安装模式下,访问的链接地址为http://localhost:8081/nexus

注意,首次启动的耗时时间很长,貌似需要建立数据库等,需要耐心等待几分钟。

如果成功,则出现下面的界面

39e36edc-a0d2-3b49-afd8-d0e4a175eb5a

通过上图我们可以发现我们已经成功的启动了Nexus,那么接下来要做的事情就更有意思了,在后续章节中笔者会陆续讲到应该如何使用Nexus工具来配置和管理咱们的私服仓库。

二、仓库类型

在上一章节中,笔者讲解了如何下载与安装Nexus工具。那么本章节咱么来看看如何使用Nexus工具配置和管理私服仓库。当然在使用Nexus之前你是需要登录的,缺省账号密码为:

account:admin;

password:admin123;

当成功登录后,你可以单击 Repositories属性看到如下页面:
d5600d88-1881-37aa-a4e3-d4e7c12bbf29

由于admin这个账号是属于Administrator权限的,你也可以通过单击Security属性进行账户的配置:

9a6d675e-b13b-327d-b1cb-3c05132db8a7

Nexus的仓库类型一共有4种,每一种仓库类型均对应有不同的操作方式:

1、group: 仓库组;

2、hosted:宿主;

3、proxy:代理;

4、virtual:虚拟;

来吧,咱们先谈谈仓库组这个概念,一个仓库组类似一个仓库集合,它和仓库之间是一对多的关系,也就是说一个仓库组可以允许包含多个仓库,Nexus仓库用例图如下:

96308ff7-be2f-38a3-bc0b-63c8056b1999

在咱们弄明白仓库组的作用后,咱们接着来看宿主仓库是干什么的。其实所谓宿主仓库可以理解为自定义仓库,用于存放一些在中央仓库无法下载的构件,比如自定义构件你可以手动将自定义构件上传至hosted中

代理仓库起到的作用是代理作用,假设本地仓库向私服进行请求时,首先会去私服仓库的本地路径中寻找构件,如果没有找到则会从中央仓库进行下载。

虚拟仓库省略...

 三、使用Nexus管理私服仓库

在了解Nexus的4种仓库类型后,咱们接下来要做的事情就是使用Nexus工具来管理咱们的私服仓库。先来看看Nexus为我们提供的一些缺省仓库:

ac73186e-3406-3004-8849-fab7ad41f8d9从上图我们可以看出Nexus缺省为我们定义了1个仓库组,7个仓库。当中最主要的几个仓库为:

9461f779-b4b9-3b03-b616-5d1ad4c8f494

3rd party(宿主仓库):用于存放一些在中央仓库无法下载的构件仓库;

Apache Snapshots(代理仓库):代理ApacheMaven仓库快照版本的构件仓库;

Central(代理仓库):代理Maven中央仓库中发布版本构件的仓库;

当然你可以根据项目需要新建仓库组及仓库,但在建立这些私有的仓库之前,咱们还是先来看看如何使用Nexus为咱们提供的缺省构件仓库(其实很多时候你真没必要去新建仓库)。

选择Public Repositories分组,单击configuration选项,你可以为仓库组添加对应的仓库:

b07178d7-64b8-3a7f-8b99-93451450ea92

单击Save按钮保存即可配置完成。这里有一点需要提醒大家的是,仓库的添加顺序直接决定了构件的下载顺序,换句话来说我们应该把需要从中央仓库或者其他远程仓库下载构件的代理仓库添加在最后

当咱们成功将指定的仓库集合添加进仓库组后,接下来我们来为3rd party(宿主仓库)上传自定义构件,所谓自定义构件指的是无法从Maven的中央仓库进行下载的构建。

笔者在此选用的是最简单方便的手动上传构件(当然上传构件至宿主仓库还有一些方式,但笔者还是侧重于最简便的方式)。

单击3rd party(宿主仓库)的Artifact Upload选项,我们首先来上传一个基于Maven项目的自定义构件:773c6508-1474-3853-ba4e-217198d96ee5

最后别忘记了添加构件:

c7016c60-68b4-38b9-afd4-e14fe4730fd4

如果你的构件不是基于Maven的呢?那么你可以选择GAV Parameters属性:61fe1457-f7e3-3452-a30b-886879c7d62b

接下来,需要配置 Maven 来连接到似有仓库,如果需要全局配置,则配置地址为 ~\.m2\setting.xml,如果需要根据工程配置,则需要跟pom.xml在同一个目录下面即可,文件存在则修改,不存在则创建,内容如下

<profiles>
	<profile>
		<id>dev</id>
		<repositories>
			<repository>
				<id>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>
		<pluginRepositories>
			<pluginRepository>
				<id>nexus</id>
				<url>http://127.0.0.1:8080/nexus/content/groups/public</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>
</profiles>

<activeProfiles>
	<activeProfile>dev</activeProfile>
</activeProfiles>

参考 http://gao-xianglong.iteye.com/blog/1735536

发布者