Maven--构建企业级仓库(二)

时间:2023-03-08 16:45:11

Maven--搭建开发环境(一)

Maven--构建企业级仓库(二)

Maven—几个需要补充的问题(三)

             看到经历的两家公司都在用Maven, 遂想把关于 Maven 的写完整。很久很久以前写了《搭建 Maven 开发环境(一)》,写完客户端,那本篇就来搭建一个 Maven 私服,用到的工具是 Nexus , Nexus 是 Maven 仓库管理器,用到 Maven 的人基本清楚他的优劣,话不多说,看下面文章,读者一定要记住我是在搭建服务器,不是你用的电脑,当提到本地仓库,指的是服务器的本地仓库,不再是你自己的机器了,下面进入正题,开始搭建。

安装Nexus

下载:http://www.sonatype.org/nexus/

安装:安装的方式有很多种,我只讲一种,是用war包形式部署,其他的也非常简单,读者可自行尝试。首先,读者需要下载nexus的war包,这个我相信你应该找的到,下载后,将此war包拷贝到Tomcat的webapps下,就可以了。然后启动Tomcat,在浏览器输入网址:http://localhost:9999/nexus;就可以看到界面了,此处注意端口号,我的Tomcat的端口号是9999,你的你自己知道哦。如果此时你还看不到界面,那说明你的JDK版本和nexus有些冲突,我一般jdk1.6的选择nexus1.8。如果您安装的是最新的版本,那在nexus-2.X.X\bin\jsw\conf\wrapper.conf文件中的wrapper.java.command=D:\Java\jdk1.7.0_05\bin\java.exe。

认识Nexus

读者可先花几分钟时间仔细观察展现在你面前的页面都有哪些东西,接下来我们就开始配置nexus,先登录,点击右上角的logIn,默认用户密码为:admin,admin123,然后我们点击左侧栏Repositories,进入仓库设置,如下图:

Maven--构建企业级仓库(二)

再来看右边的画面,右边上半部分是列出来的repository,如下图:

Maven--构建企业级仓库(二)

我们先来关注一下Type这一列,有group、hosted、proxy、virtual几种,virtual忽略不说,介绍一下下面几种库的类型:

Proxy:是远程仓库的代理。比如说在nexus中配置了一个centralrepository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用

Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在centralrepository是获取不到的,就需要手工上传到hosted里。

Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom(setting)中配置多个地址,只要统一配置group的地址就可以了。

可以看到,Nexus已经建好了几个仓库。这些仓库有代理仓库,宿主仓库等,可以满足代替Maven*库的功能 。一般应用下,我们就不用自己再去建立仓库了。

配置*仓库

Maven central是Maven的*仓库,点击它并选择configuration标签栏,我们会看到下面的页面:

Maven--构建企业级仓库(二)

可以看到*仓库也是一个代理仓库,他代理谁的呢?请看Remotestorage location,这里是远程仓库的地址,为了提高代理速度,你可以修改为国内的镜像地址。默认值是http://repo1.maven.org/maven2/

Override local storage location:在这个选项你可以配置你的Nexus本地仓库的存放地址,用来覆盖其默认的存放地址。

Maven central是一个比较大的代理仓库,一般是没有必要自己创建库的,如果你需要添加的一个代理仓库,那么可以在点击左侧栏里面的Repositories,然后右边的页面点击add-> add proxy repository即可。通常情况下,使用预设的代理仓库已经能够满足大部分项目的需求了,只有在特殊需求的情况下才会参加代理仓库。

Download remote indexes:这里配置是否下载远程索引文件,模式是false,建议配置为true,这样设置以后,Nexus会自动从远程*仓库下载索引文件,我们便可以通过索引文件来搜索我们需要的构件。这里有个问题,索引更新慢的要死,读者可以采用理想方式,先下载索引包:nexus-maven-repository-index.zip,然后按照此文章照做就可以了。真是土到家了!

*仓库就是解决大部分jar包的问题,但是我们在实际项目中会分很多模块(后面会讲),会有很多*库没有的jar包,那怎么来管理呢,接下来我们讲本地仓库的配置(也就是宿主仓库)。

配置宿主仓库(本地仓库)

我们前面讲到类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases,Snapshots, 3rd Party.如下图:

Maven--构建企业级仓库(二)

分别讲一下这三个预置的仓库都是做什么用的:

Releases:这里存放我们自己项目中发布的构建,通常是Release版本的,比如我们自己做了一个helloworld的项目,生成的构件为helloworld.war我们就可以把这个构建发布到Nexus的Releases本地仓库。

Snapshots:这个仓库非常的有用,它的目的是让我们可以发布那些非release版本,非稳定版本,比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用,因为你的同伴正在依赖你的模块开发,那么这个时候我们就可以发布Snapshot版本到这个仓库,你的同伴就可以通过简单的命令来获取和使用这个临时版本.。

3rd Party:第三方库,你可能会问不是有*仓库来管理第三方库嘛,没错,这里的是指可以让你添加自己的第三方库,比如有些构件在*仓库是不存在的。比如你在*仓库找不到Oracle的JDBC驱动,这个时候我们就需要自己添加到3rdparty仓库。

配置Maven仓库组

我们一个项目不止会用到*仓库,也会用到宿主仓库,因此仓库组把他们做一个整合,对外提供唯一的地址,我们在客户端调用的时候就配置一个地址,很方便。见下图:

Maven--构建企业级仓库(二)

注意:1.是从右往左添加,别搞错了;2.仓库的添加顺序直接决定了构件的下载顺序,换句话来说我们应该把需要从*仓库或者其他远程仓库下载构件的代理仓库添加在最后。

配置代理

此处配置代理,有两个原因:1.好多公司处于安全考虑,用代理上网,而nexus经常需要往mavenrepository中心下载东西,所以需要给nexus设置代理。2.就是你配置的服务器是不能上网的,因此你得让他上网,才能从*仓库下载东西,具体设置见下图:

Maven--构建企业级仓库(二)

到此时,一个企业级的Maven库已经构建完毕,就可以通知各位同事,方便的使用此库啦。至于权限的问题,我就不多说了,您可以看左侧栏Security中的设置。