注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

Maven 简介  

2014-03-14 21:56:32|  分类: 软件开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Maven 简介

 Maven 简介 - 北漂的小羊 - 北漂的小羊

 

1. Maven 是什么

    a)  单词含义

          知识的积累、专家、内行。

     b)  本文含义

          跨平台的项目管理工具,主要服务于 Java 平台的项目构建、依赖管理和项目信息管理,

          无论小型开源项目,还是大型企业级应用,无论是传统的瀑布式开发,还是流行的敏捷模式,

          Maven 都能大显身手。

 

2. 构建是什么

    工作中大部分时间都会花销在构建上,如果所有的构建工作都需要手动去完成,

    在软件企业来说成本非常大,让软件完全自动化的完成这一系列工作,

    一条简单的指令就可以像流水线一样,让烦琐简化。

    a)  清理(claen)

    b)  编译(compile)

    c)  单元测试(test)

    d)  生成文档(doc)

    e)  打包(jar、war)

     f)  部署(deploy)

 

3. Maven 的优秀

    最大化的消除了构建的重复,抽象了构建生命周期,从清理、编译、测试到生成报告,

    再到打包和部署,只需要简单的配置,输入简单的指令,Maven 就可以帮我们处理那些烦琐的任务。

    a)  最大化消除构建重复(一键完成构建)

    b)  依赖管理,仓库管理

    c)  平台无关性

    d)  大量的现有成熟插件

    e)  抽象构建生命周期模型

     f)  标准化构建过程(促进项目团队的标准化,约定优于配置)

    g)  免费的中央仓库

 

4. 为什么需要 maven

    Maven 不是 Java 领域唯一的构建管理解决方案。

    a)  IDE 不是万能的

         i.   IDE 依赖大量的手工操作(即效率低,容易出错)

        ii.   很难统一所有人的 IDE 配置(每个人喜好不同)

    b)  Make

         i.   强大之处在于可以调用所有系统的本地命令(Unix/Linux)

        ii.   很难实现跨平台的构建(对 Java 很不友好)

       iii.   语法容错率低(空格)

    c)  Ant

         i.   过程式的显示指定目标,不同项目需要编写不同 build.xml(重复)

        ii.   没有依赖管理(需要借助 Ivy 管理依赖)

    d)  不重复发明轮子

         i.   很少人说我不用 Spring,我自己实现 IOC

        ii.   很少人说我不用 Hibernate,我自己封装 JDBC

     e)  趋势

          i.   大多数开源项目

         ii.   大多数企业级应用


上大餐啦:

构件:在maven中,任何一个依赖(jar包)、插件(maven-compiler-plugin-2.5.1.jar)或者项目输出(前面例子中运行mvn clean install部署到本地仓库的jar包)都称为构件。

仓库:maven在某一位置存储所有共享的构件,这个统一的位置就是仓库。

仓库分类:maven仓库分为本地仓库和远程仓库

本地仓库:在本地机器上缓存构件的文件目录(如前面例子中的D:\dev_env\maven)

                 安装好maven后,本地仓库目录是不存在的。当用户输入第一条maven命令,maven才会创建本地仓库

                  maven本地仓库布局:(也可以说是jar包在本地仓库中的路径,此处只是说明常规的布局)

                                  maven是根据构件(jar包)的GAV属性来定义构件存在的路径的,例如某个构件的GAV属性是

                                              <groupId>com.sun.xml.bind</groupId>
                                             <artifactId>jaxb-xjc</artifactId>
                                              <version>2.2.6</version>

                                   maven首先将groupid属性值中的点号替换成文件路径分隔符  /  ,根据上面的例子即为   com/sun/xml/bind ,然后加上artifactId,再加上version,最终路径就是  com/sun/xml/bind/jaxb-xjc/2.2.6 ,所以构件存放的目录就应该是本地仓库目录下的   com/sun/xml/bind/jaxb-xjc/2.2.6  目录下。

远程仓库:包括中央仓库、私服和其他公共库

私服:是一种特殊的远程仓库,代理缓存远程仓库(可以是默认的中央仓库、可以是第三方的公用仓库)的构件。本地maven用户需要下载构件时,从私服请求。若私服中找不到构件,就从远程仓库(中央仓库或其他公共库)下载,缓存在私服上,供用户下次请求。 若一些无法从外部远程仓库下载的构件,可以从本地上传到私服上供maven用户请求。

nexus私服的搭建和应用

nexus搭建:

1、下载地址:http://www.sonatype.org/nexus/archived(win:zip包   linux :tar.gz)

2、将下载后的zip包解压缩,然后配置环境变量,在path变量后添加nexus的bin路径(本地环境路径为:D:\nexus-2.7.0-bundle\nexus-2.7.0-04\bin)

3、在控制台(cmd)下运行nexus install命令将nexus安装到windows的服务中(可到系统的服务中查看)
4、在控制台(cmd)下运行nexus start命令

5、在浏览器中输入http://ip:8081/nexus即可访问搭建的nexus私服(URL中的ip为本机ip)

      nexus的默认端口是可以手动更改的(修改D:\nexus-2.7.0-bundle\nexus-2.7.0-04\conf\nexus.properties文件中的application-port属性值,重启nexus)

6、点击页面右上角的log in,输入用户名(默认admin)和密码(默认admin123)

nexus仓库

点击页面左边的Repositories可以在界面上显示nexus下所有的仓库

如下图,根据type字段可以将仓库分为:hosted、proxy、group、virtual

1、hosted的仓库:内部项目的发布仓库(如前面例子中执行mvn clean install命令发布项目,最终发布的jar包回放入hosted仓库)

      3rd party仓库存储用户手动上传的构件,这些构件不能从中央仓库下载,在仓库的Artifact Upload页签中可以执行

2、proxy的仓库:从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径)

3、group仓库:组仓库用来方便开发人员进行设置的仓库

      group仓库可以自由组合其他的仓库为一个组,然后在项目的pom文件的repository可以配置这个仓库

nexus仓库设置

1、更新私有仓库索引

点击Repository名称为Central,type为proxy的仓库,在页面下方的Configuration页,把 Download Remote Indexes的值改为True,然后点击最下面的save按钮。(更新索引的时间有点长,请耐心等待。更新完索引后可在Browse Index页签点击刷新按钮就可显示所有更新后的索引,展开索引树,点击到叶子节点--依赖jar包,可查看其依赖配置坐标。)

可以在页面左上角的Artifact Search搜索框中输入要搜索的依赖(如:spring),就会显示搜索到的依赖配置坐标。

由于自动更新索引时间较长,也可以手动下载包含索引文件的压缩包nexus-maven-repository-index.zip,然后放入Central仓库索引存储的目录(本地路径为D:\nexus-2.7.0-bundle\sonatype-work\nexus\indexer\central-ctx  ,这种方式未经验证,压缩包下载失败,第一种自动更新可以成功)。

2、配置镜像

修改本地仓库的配置文件D:\dev_env\maven\settings.xml,在mirrors节点下添加如下配置

  1. <mirror>  
  2.       <id>central</id>  
  3.       <mirrorOf>*</mirrorOf>  
  4.       <name>Human Readable Name for this Mirror.</name>  
  5.       <url>http://192.168.19.38:8081/nexus/content/groups/public/</url>  
  6.     </mirror>  

mirrorOf配置为*,表示这个镜像配置适用于所有的仓库,是所有仓库的一个镜像,maven无论要去那个仓库下载构建都会跳转到镜像URL(此时配置的是nexus的group类型的仓库地址,该组仓库包含了其他几个类型的仓库,可以点击这个仓库,查看其Configuration页签)去下载。

mirrorOf也可以配置一个或多个仓库,多个仓库配置值要与对应的仓库id一致,以逗号分隔。

项目的发布:

1、配置发布仓库路径

在user-parent的pom文件的project节点下添加项目发布仓库信息。snapshotRepository配置快照版本发布仓库路径(由于使用的例子定义的都是快照版本,所以项目都会发布到user-snapshots这个仓库中,对应的是nexus上与配置URL匹配的仓库);repository配置release版本发布仓库路径。url属性定义最终发布到的nexus仓库路径。

  1. <distributionManagement>  
  2.     
  3.     <snapshotRepository>  
  4.         <id>user-snapshots</id>  
  5.         <name>User Project SNAPSHOTS</name>  
  6.         <url>http://192.168.19.38:8081/nexus/content/repositories/snapshots/</url>  
  7.     </snapshotRepository>  
  8.       
  9.     <repository>  
  10.         <id>user-releases</id>  
  11.         <name>User Project Release</name>  
  12.         <url>http://192.168.19.38:8081/nexus/content/repositories/releases/</url>  
  13.     </repository>  
  14.       
  15.   </distributionManagement>  

 

2、授权

项目发布的时候需要配置一个有发布权限的用户(nexus有个默认的用户deployment,默认密码deployment123),nexus仓库会鉴权,修改本地仓库的配置文件D:\dev_env\maven\settings.xml,在servers节点下添加如下配置

  1. <server>  
  2.       <id>user-snapshots</id>  
  3.       <username>deployment</username>  
  4.       <password>deployment123</password>  
  5.     </server>  
  6.   
  7.     <server>  
  8.       <id>user-releases</id>  
  9.       <username>deployment</username>  
  10.       <password>deployment123</password>  
  11.     </server>  

3、发布

在springsource中导入user-parent及其子项目,运行user-parent下的pom文件 clean deploy 

发布成功后可以到<url>http://192.168.19.38:8081/nexus/content/repositories/snapshots/</url>对应的nexus仓库的Browse Storage页签下查看,会显示所有项目的jar包


  评论这张
 
阅读(718)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016