Maven私服之Nexus入门图文教程
老夫相信看到这篇文章的人一定已经知道maven和nexus分别是什么东西了,所以就不多做介绍了,下面直接从下载安装开始讲。
1. 下载安装
大家可以直接从这个链接http://www.sonatype.org/nexus/go/下载系统,下载完成之后解压到系统的任何文件夹下就可以了,老夫下载是:nexus-2.8.1-01,然后可就是安装了。
解压一路进到nexus-2.8.1-01/bin/jsw。然后选择适合自己的系统的文件夹进去,老夫的电脑是win32,所以进去之后是这个样子
然后用管理员身份先运行install-nexus.bat安装服务,然后运行console-nexus.bat,等起来之后直接在浏览器中输入:http://localhost:8081/nexus,我们看到下图就是成功了,忘了是不是需要安装服务:wrapper了,大家试一试就知道了。
2. 配置nexus
要管理Nexus,你首先需要以管理员身份登陆,点击界面右上角的login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容,变成了下面这个样子
这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。你会看到Nexus的功能十分丰富和强大,本文,老夫只介绍一些最基本的管理和操作。
因为是老夫习惯于让大伙看了这篇文章就知道怎么做,所以这里多内容咱就不说了,直接上配置,点击左边Administration菜单下面的Repositories,找到右边仓库列表中的三个仓库Apache Snapshots,Codehaus Snapshots和Maven Central,然后再没有仓库的configuration下把Download Remote Indexes修改为true。如下图:
然后在Apache Snapshots,Codehaus Snapshots和Maven Central这三个仓库上分别右键,选择Repari Index,这样Nexus就会去下载远程的索引文件。
这样设置以后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以切换到Browse Index看看是否生成了这些索引文件。
3. 添加一个代理仓库
加入我们想要代理Sonatype的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤如下,在Repositories面板的上方,点击Add,然后选择Proxy Repository,在下方的配置部分,我们填写如下的信息:Repository ID – sonatype;Repository Name – Sonatype Repository;Remote Storage Location – http://repository.sonatype.org/content/groups/public/。其余的保持默认值,需要注意的是Repository Policy,我们不要代理snapshot构件,至于原因老夫相信读者应该已经很清楚了,然后点击Save。因为比较简单就不上图了。
4. 管理宿主仓库
Nexus预定义了3个本地仓库,分别为Releases,Snapshots,和3rd Party。这三个仓库都有各自明确的目的。Releases用于部署我们自己的release构件,Snapshots用于部署我们自己的snapshot构件,而3rd Party用于部署第三方构件,有些构件如Oracle的JDBC驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中。
当然你也可以创建自己的本地仓库,步骤和创建代理仓库类似,点击Repository面板上方的Add按钮,然后选择Hosted Repository,然后在下方的配置面板中输入id和name,注意这里我们不再需要填写远程仓库地址,Repository Type则为不可修改的hosted,而关于Repository Policy,你可以根据自己的需要选择Release或者Snapshot。
5. 管理Maven仓库组
Nexus 中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据 groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者 proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。
最新neuxs默认自带了一个名为“Public Repositories”组,点击该组可以对他保护的仓库进行调整,把刚才建立的仓库Sonatype Repository加入其中,这样就不需要再在maven中明确指定仓库的地址了。同时创建一个Group ID为public-snapshots、Group Name为Public Snapshots Repositories的组,把Apache Snapshots、Codehaus Snapshots、Snapshots和Sonatype Repository也加入其中。
6. 配置Maven使用Nexus
默认情况下,Maven依赖于中央仓库,这是为了能让Maven开箱即用,但仅仅这么做明显是错误的,这不仅会造成大量的时间及带宽的浪费,而且也不能使用公司自己的jar文件。既然本文的前面已经介绍了如何安装和配置Nexus,现在我们就要配置Maven来使用本地的Nexus来解决这个问题。
其实我们可以将Repository配置到POM中,但一般来说这不是很好的做法,原因很简单,你需要为所有的Maven项目重复该配置。因此,这里我们将Repository的配置放到$user_home/.m2/settings.xml中,放一个老夫在公司里面的完整的settings.xml的完整文件:
<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>E:maven_repository</localRepository> --> <localRepository>D:/J2EE/repo</localRepository> <!--非官方插件命令行运行配置--> <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups> <servers> <server> <id>releases</id> <username>XXX</username> <password>XXXXXX</password> </server> <server> <id>snapshots</id> <username>XXX</username> <password>XXXXXX</password> </server> <server> <id>nexus</id> <username>XXX</username> <password>XXXXXX</password> </server> </servers> <mirrors> <!--配置仓库镜像--> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://nexus.lagou.com/content/groups/public/</url> </mirror> </mirrors> <profiles> <!--配置仓库和插件仓库--> <profile> <id>nexus</id> <repositories> <repository> <id>central</id> <name>central</name> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <name>central</name> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <!--激活profile--> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
其实如果只需要下载的话,settings.xml中server是没有必要配置的,至于为什么配置了,下文会作出说明。
7. 部署构件至Nexus
Nexus提供了两种方式来部署构件,你可以从UI直接上传,也可以配置Maven部署构件。
①. 通过Nexus UI部署
有时候有个jar文件你无法从公共Maven仓库找到,但是你能从其它得到这个jar文件(甚至是POM),那么你完全可以将这个文件部署到Nexus中,使其成为标准流程的一部分。步骤如下:
点击左边导航栏的”Repository”,在右边的仓库列表中选择一个仓库,如“3rd Party”,然后会看到页面下方有7个tab,选择最后一个“Artifact Upload”,你会看到构件上传界面。选择你要上传的构件,并指定POM,(或者手工编写GAV等信息),之后选择add artifact,最后点击Upload Artifact,该构件就直接被部署到了Nexus的”3rd Party”仓库中,具体就不多说了,大家可以自己操作几次就明白了,可以参考下图(由于图片所限,最后这个button截图没有截出来)。
②. 通过Maven部署
更常见的用例是:团队在开发一个项目的各个模块,为了让自己开发的模块能够快速让其他人使用,你会想要将snapshot版本的构件部署到Maven仓库中,其他人只需要在POM添加一个对于你开发模块的依赖,就能随时拿到最新的snapshot。
以下的pom.xml配置就能让你通过Maven自动化部署构件:
<project> ... <distributionManagement> <repository> <id>releases</id> <name>Nexus Release Repository</name> <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> ... </project>
这里我们配置所有的snapshot版本构件部署到Nexus的Snapshots仓库中,所有的release构件部署到Nexus的Releases仓库中。但是这么配置还没有完,因为部署文件到系统里面肯定需要权限验证,那么此时我们我们在settings.xml中配置的service就派上用场了,因为我们配置了对应Repository id的用户名和密码。
然后,在项目目录中执行mvn deploy ,你会看到maven将项目构件部署到Nexus中,浏览Nexus对应的仓库,就可以看到刚才部署的构件。当其他人构建其项目时,Maven就会从Nexus寻找依赖并下载。
8. Maven常用插件
在实际使用中,maven有非常多的使用查看,老夫之前的blog曾介绍过一个Maven项目如何生成测试报告,今天在介绍一个打包的时候用到的plugin:maven-source-plugin,他的作用是,在上传到Nexus时,会同步上传一个-sorce.jar的源码包,配置如下:
<plugin> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <phase>deploy</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugin>
最后,其实Nexus还有很多其它的特性,如用户管理,角色权限管理等等,但因为本文仅仅是一个入门教程,所以就不对其做过多讲解了,用户可以在自己的使用中慢慢去了解探索,另外Nexus的OSS版本是完全开源的,如果你有兴趣,你可以学习其源码,甚至自己实现一个REST客户端。
马上拥抱Nexus吧,它是免费的!
参考资料:
1. http://juvenshun.iteye.com/blog/349534
2. http://blog.csdn.net/fanyuna/article/details/40145827
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/248
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
不错啊,一直坚持写blog,佩服![威武]