一、简介
Nexus是一个应用广泛的Maven仓库管理软件。
二、安装
Nexus是典型的Java Web应用。它有两种部署方式:一种是部署bundle包,内置jetty服务器;一种是部署war包到java web 服务器(比如tomcat等),通过tomcat对外提供服务。
1、bundle方式安装
下载bundle包:http://download.sonatype.com/nexus/oss/nexus-2.6.0-05-bundle.zip,然后解压到某一目录(如/usr/local/)下面,解压之后包括两个文件夹:
(1)nexus-2.6.0-05:该目录包含了运行需要的文件:lib包、jetty服务器的配置、服务器启动\停止脚本等等。
(2)sonatype-work:该目录包含了服务生成的配置文件、仓库文件和日志文件等。
目录 /usr/local/nexus-2.6.0-05/bin下面包含了控制服务器的脚本,用法如下:
./nexus console:启动服务,所有的输出打印到控制台,可以通过Ctrl-C停止服务。
./nexus start:在后台以daemon方式启动服务
./nexus stop:停止后台启动的服务
./nexus status:显示后台服务的状态
./nexus restart:重启后台服务
Nexus服务默认监听8081端口,可以通过/usr/local/nexus-2.6.0-05/conf/nexus.properties中配置项目application-port进行修改。
2、war包方式安装
以war包方式其实就是一个普通的jave web部署。
三、仓库
仓库是nexus中最重要的概念之一。nexus中的仓库包括四种类型:宿主仓库(hosted)、代理仓库(proxy)、虚拟仓库(virtual)和仓库组(group)。仓库具有一定个格式(format):maven2/maven1。仓库具有一定的策略(policy):release和snapshot。
Nexus服务器初始时下列仓库:
(1)Releases仓库:这是一个宿主(hosted)仓库。该仓库一般用来保存我们自己的项目的发布版。
(2)Snapshots仓库:这是一个宿主(hosted)仓库。该仓库一般用来保存我们自己的项目的快照版本。
(3)3rd Party仓库:这是一个宿主(hosted)仓库。该仓库一般用来保存第三方的包。
(4)Apache Snapshots:这是一个代理(proxy)仓库。该仓库保存从apache快照库下载的包(http://repository.apache.org/snapshots/)。
(5)Codehaus Snapshots:这是一个代理(proxy)仓库。该仓库保存从codehaus快照库下载的包(http://nexus.codehaus.org/snapshots/)。
(6)Central:这是一个代理(proxy)仓库。该仓库保存从中央仓库下载的包(http://repo1.maven.org/maven2/)。
(7)Central M1 shadow:这是一个虚拟(virtual)仓库。该仓库以M1格式代理中央仓库。
(8)Public Repositories:这是一个组(group)仓库。该仓库可以代理以上仓库,通过统一的接口供外下载。
四、配置Maven项目从本地私服下载构件
1、项目文件配置方式
在project下面增加repositories和pluginRepositories
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
2、setting.xml配置方式
在profiles下面增加一个profile
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
在activeProfiles下面增加一个activeProfile
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
五、部署构件至本地私服
在project下面配置distributionManagement
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Releases Repository</name>
<url>http://10.241.227.69:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-releases</id>
<name>Nexus Releases Repository</name>
<url>http://10.241.227.69:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
这里配置了两个repository用来存储本地编译的构件。
匿名用户只有读权限没有部署权限。部署之前在setting.xml中配置认证信息。在servers下面增加配置admin/admin123是nexus服务的默认账号密码。
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>