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,进入仓库设置,如下图:

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

我们先来关注一下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标签栏,我们会看到下面的页面:

可以看到中央仓库也是一个代理仓库,他代理谁的呢?请看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.如下图:

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

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

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

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

配置Maven仓库组

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

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

配置代理

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

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

Maven--构建企业级仓库(二)的更多相关文章

  1. Sonar+Hudson+Maven构建系列之二:迁移Sonar

    摘要:由于昨天在一台机器上安装的东西太多了,导致Linux机器上非常卡,一台Linux负担了jira, fisheye, confluence, sonar, hudson, mysql 等等,本来已 ...

  2. Maven进价:Maven构建系列文章

    Maven:基于Java平台的项目构建.依赖管理和项目信息管理. 1.构建 Maven标准化了构建过程 构建过程:编译.运行单元测试.生成文档.打包和部署 避免重复:设计.编码.文档.构建 2.依赖管 ...

  3. 只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

    只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

  4. Gitlab+Jenkins学习之路(十二)之Maven的私有仓库Nexus

    1.什么是Nexus? 在前面进行maven项目的构建中,可以看到在构建的过程中需要安装maven的依赖插件,如图: 而在maven的默认配置中是在官网的中央仓库和第三方的maven仓库进行下载,速度 ...

  5. maven 动态版本 aliyun阿里云Maven仓库地址——加速你的maven构建

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. Maven实战读书笔记(二):Maven坐标与仓库

    2.1 Maven坐标 Maven坐标是Maven用来表示一个组件依赖的标示. Maven通过下面几个元素定义坐标:groupId.artifactId.version.packaging.class ...

  7. 利用Eclipse中的Maven构建Web项目报错(二)

    利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...

  8. 利用Eclipse中的Maven构建Web项目(二)

    利用Eclipse中的Maven构建Web项目 1.新建源文件夹,Java Resources鼠标右键,"New-->Source Folder" 2.新建src/main/ ...

  9. 二:maven构建module

    通常情况下,我们一个项目是需要分多个模块的,这是我们用maven管理项目就需要构建一个多模块的项目: 通常的结构是一个模块中有一个主项目,下面包含多个子项目,如果是web项目则子项目中有一个是java ...

随机推荐

  1. 浅谈JDBC(二)

    JDBC中的事务 简单来说,事务就是要保证一组DAO方法的操作,要么一起成功要么一起失败. 1.事务控制的位置 在Service中的业务方法内进行事务控制. 2.事务控制的代码 a.注意:JDBC会自 ...

  2. 数组有没有 length()这个方法? String 有没有 length()这 个方法?

    1.数组中有length属性. 2.String有lenth()方法.

  3. java读取配置文件的几种方法

    java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496         在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...

  4. Codeforces 116C - Party(dfs)

    n个人,每个人之多有一个上司.“上司”关系具有传递性.求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组.拿到题就用树的直径wa了一炮... 正解是有向无环森林的最长路.从每个跟节点df ...

  5. poj 2135 Farm Tour 费用流

    题目链接 给一个图, N个点, m条边, 每条边有权值, 从1走到n, 然后从n走到1, 一条路不能走两次,求最短路径. 如果(u, v)之间有边, 那么加边(u, v, 1, val), (v, u ...

  6. java 类排序

    参考文档:Java排序: Comparator vs Comparable 入门 java类经常面临排序问题,据我所知:java提供comparable和comparator两种比较方式: 1. co ...

  7. Linux必学的60个命令【转载】

    Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存  [转载地址]http://blog.chinaunix.net/uid-16728139-id-3154272.ht ...

  8. 关于appcompat v7出现的问题

    一.问题描述: 新建了一个MIN-SDK为API 8的工程之后,TARGET-SDK为API 17的Android工程之后,自动生成的appcompat v7会提示“v7/value21:no res ...

  9. 斯坦福 IOS讲义 课件总结 三

    1,@property (nonatomic,readwrite)NSInteger score;注意这里有一个只读和只写的属性,readonly. 2,重写初始化方法也可以改名字和传参数,(改名一般 ...

  10. css3: css3选择器

    --------------------css3选择器-------------------------css3属性选择器  ~~属性选择器基本上ie7+都支持,可以相对放心的使用 见: www.ca ...