如何搭建Maven服务器

来源:互联网 发布:梦龙网络计划 编辑:程序博客网 时间:2024/05/08 16:43
Nexus是Maven资源仓库管理器。项目如果采用Maven,通常应该在本地架设一个Maven资源仓库服务器,在代理远程资源仓库的同时维护本地资源仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,Nexus还提供了强大的资源仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven资源仓库管理器。

一、下载及安装Nexus
可以从http://www.sonatype.org/nexus/下载最新版本的Nexus。Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。这里我们重点讲解第一种安装方式,这种方式将Nexus(开源版本)作为一个单独的服务器来安装,Nexus绑定有一个Jetty,Jetty监听主机(0.0.0.0)上所有配置的IP地址并默认运行在端口8081,附件中附带了2.1.2版本的直接解压运行的Nexus。
解压nexus-2.1.2-bundle.zip至任意目录,如D:\nexus,解压后有2个目录,nexus-2.1.2为nexus自身的目录,sonatype-work目录包含所有资源库和Nexus的配置信息,这样配置在Nexus自身目录之外,使得Nexus的版本更新更加容易,如果想要改变该目录的位置,可以在文件nexus-2.1.2/conf/plexus.properties中修改nexus-work属性。
之后我们运行nexus-2.1.2\bin\下的nexus命令,第一次需要先运行nexus install,以后直接运行nexus start就可以启动Nexus,我们可以通过浏览器打开Nexus:http://localhost:8081/nexus。

单击页面右上角的【log in】链接,会弹出登录对话框,默认的用户名是“admin”,密码是“admin123”。


二、配置Nexus
以管理员身份登陆成功后,会看到左边的导航栏增加了很多内容。在这里,我们可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。可以看到Nexus的功能十分丰富和强大。
1、修改密码
在管理界面左侧栏,选择【Security】|【Users】,会打开用户的管理页面,选择要修改的用户右键菜单可以修改密码。建议修改默认密码,以保证安全。
2、设置远程资源库索引
在Nexus中,用户管理的资源库有三种类型(virtual除外):
hosted,本地资源库,通常我们会部署自己的构件到这一类型的资源仓库。
proxy,代理资源仓库,它们被用来代理远程的公共资源仓库,如maven中央资源仓库。
group,资源仓库组,用来合并多个hosted/proxy资源仓库,通常我们配置maven依赖资源仓库组。
Nexus代理三个重要的远程资源库:Central资源库、Apache Snapshot资源库和Codehaus Snapshot资源库。每个远程资源库都包含有成千上万的artifact,全部下来是不切实际的。所以Nexus中只维护它们的索引,使用这些索引来搜索artifact,需要的时候再下载内容。不过默认情况下是禁止下载这些索引的,这就需要通过配置允许下载索引。步骤如下:
在左侧栏中,选择【Views/Repositories】|【Repositories】,右侧会打开用户管理的资源列表。找到上述的三个远程资源库,在下方的属性窗口切换到Configuration页签,将其中的“Download Remote Indexes”设为“true”,并保存修改。
在Nexus下载远程资源库索引文件之后,我们就可以在本地搜索远程资源库的所有构件(artifact)了。
3、设置远程资源库代理
如果访问外网资源需要设置HTTP代理,对于Central等代理外网的资源库,需要设置HTTP代理,同样在Configuration页签中找到Override HTTP Proxy Settings,勾选并设置代理IP和端口。

4、管理资源库

在左侧栏中,选择【Views/Repositories】|【Repositories】,右侧会打开用户管理的资源列表。在最上面一栏,我们可以更新、添加和删除资源库。我们可能会用到两种资源库Hosted和Proxy,创建资源库主要有Repository ID、Repository Name以及Repository Policy三个参数,Repository ID和Repository Name设置为唯一即可,Repository Policy有Release和Snapshot两种,这个参数比较关键,从Release库中只能访问到Release包,Snapshot库中只能访问到Snapshot,要根据资源的类型选择对应的策略,对于Proxy资源库还需要设置Remote Storage Location,这个值就是要代理的资源库在它的资源列表中的Repository Path值。
创建资源库后会在sonatype-work\nexus\storage中创建一个对应的目录,对于Hosted资源库,我们只需将maven资源,解压到这个目录,并在资源列表右键菜单中执行Update Index,我们本地的库就创建成功了。
5、管理Maven仓库组
添加菜单中还有一种Repository Group,Nexus中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。
Nexus预定义了“Public Repositories”仓库组,默认合并所有预定义的Release仓库。
我们可以创建一个预定义Snapshot的仓库组“public-snapshots”,然后选择下方的Configuration页签,在配置面板中,将右边“Avaiable Repositories”中的资源库移动到左边的“Ordered Group Repository”中即可。

三、配置Maven使用本地Nexus
本地需要下载maven组件,解压并设置MAVEN_HOME环境变量,将%MAVEN_HOME%\conf\settings.xml替换为如下内容,将其中的所有IP地址改为搭建的maven服务器地址,localRepository设置为保存本地maven仓库的目录。

<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  <localRepository>D:\develop\maven\repo</localRepository>  <profiles>    <profile>      <id>nexus</id>      <repositories>        <repository>            <id>central</id>            <name>local private nexus</name>            <url>http://localhost:8081/nexus/content/groups/public</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>false</enabled></snapshots>        </repository>        <repository>            <id>central-snapshots</id>            <name>local private nexus</name>            <url>http://localhost:8081/nexus/content/groups/public-snapshots</url>            <releases><enabled>false</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>        </repository>      </repositories>      <pluginRepositories>        <pluginRepository>            <id>central</id>            <name>local private nexus</name>            <url>http://localhost:8081/nexus/content/groups/public</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>false</enabled></snapshots>        </pluginRepository>        <pluginRepository>            <id>central-snapshots</id>            <name>local private nexus</name>            <url>http://localhost:8081/nexus/content/groups/public-snapshots</url>            <releases><enabled>false</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>        </pluginRepository>      </pluginRepositories>    </profile>  </profiles>  <activeProfiles>    <activeProfile>nexus</activeProfile>  </activeProfiles></settings>

原创粉丝点击