信只要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量,一个
build.xml 能够完成编译、测试、打包、部署等很多任务,这在很大的程度上解放了程序员们的双手。但同时也存在一些其他的问题,比如:jar
文件管理混乱,每次都需要自己去下载;build.xml 因项目结构的不同导致差异性较大。

概况


从项目中引入 Maven 以后,以前 Ant 能解决的,Maven 提供了更加简洁的解决方案,而以前 Ant 解决不了的,Maven
也能很好的解决。这就直接导致了项目管理工具的更新换代。当然,这已不是什么新鲜事了。只不过,一直到现在才有时间来分享项目中使用 Maven
的感受,这一点上,真的很抱歉,后续会及时的更新。
Maven 的入门教程网上已经有很多了,这里就不再赘述这些基本知识了。还没有接触过 Maven 的童鞋,请移步 Google 或 Baidu。之后再回来看这篇文章。在这篇文章里,我主要结合项目中 Maven 的使用,以及需要注意的事项来与大家讨论。
原理


到 Maven 的原理,其实很简单,就是采用远程仓库和本地仓库以及一个类似 build.xml 的 pom.xml,将 pom.xml 中定义的
jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝
jar。

结构

项目中我们都会根据自己的习惯创建目录结构,虽然有规范,但难免会有疏漏,长此下去,项目的结构会越来越乱的。Maven 解决了这个问题,对于不同的项目,它提供了多种选择,并将其作为目录模板,如下图所示。
使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例: 
src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。


些动作在 Maven1 中,是需要在 maven.xml
中使用<preGoal>或<postGoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src和
test都使用resources,方便构建和测试,这种方式本就已是前人的经验。通过使用Maven2,使这个经验在开发团队中得到普及。
生命周期

在 Maven2 中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:

果要执行项目编译,那么直接输入:mvn
compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行
mvn test时,会先运行mvn test-compile,然后才是mvn test。当然,开发中,我们一般都不会直接操作 Maven
的。而是在 Eclipse 中使用 Maven 插件,其中用的最多的命令就是
clean 、compile 、install 、deploy 等。
依赖

说完生命周期,还有一个必须要说的就是依赖管理了。Maven 中是通过在 pom.xml 中添加依赖从而来引入 jar 包的。其原理是:每一个 jar 都会有独立的坐标,Maven 就是通过坐标来定位到具体的 jar 的。

好像平面坐标系一样,通过 x 轴 和 y 轴定位一个坐标点。Maven 定义了这样一组规则:世界上任何一个构件都可以使用 Maven
坐标唯一标识,Maven 坐标的元素包括 groupId 、artifactId 、version 、packaging 、classifier
。只要我们提供正确的坐标元素,Maven 就能够找到它。
建议


的人可能会有疑问,以前没有 Maven 的时候,我们可以去各自的官网下载 jar,但现在只能通过 pom 引用
jar。那么如何知道需要添加哪些依赖呢?还有需要什么版本呢?这也是为什么有一部分习惯了自己下载 jar,而到了 Maven 这不知道该怎么用了。

然,Maven 还不是智能的,你不可能直接命令 Maven
直接给你找项目所需要的各种组件,或许以后这样的智能化的软件管理工具会出现,至少现在还没有。因此,还得需要你自己去添加 pom
依赖。至于该如何找,这里我告诉大家一个方法,虽然方法有点笨,但或许对你快速定位到具体组件有所帮助。
举个例子,假如现在需要添加 Hibernate 的依赖,但具体哪个版本呢,可以先不用管,直接去 Baidu 或者 Google,以“ maven spring  repository ”为关键字搜索,往往第一个链接中,就是你需要的方案。
当然,这只是一种方法,只针对刚接触 Maven 的童鞋们。随着项目经验的增多,以后你就会越来越发现,Maven 解放的不仅仅是你的双手,还有你最宝贵的时间。

 
 

maven 工作原理和添加jar包技巧的更多相关文章

  1. maven向本地库添加jar包

    mvn install:install-file -DgroupId=com.lowagie -DartifactId=itextasian -Dversion=1.0 -Dpackaging=jar ...

  2. Maven 手动添加 JAR 包到本地仓库

    Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个人共用,有时候用 Maven 来远程下载 JAR 包会显得很慢 ...

  3. 如何在maven中添加jar包

    Maven 中央仓库地址: 1. http://www.sonatype.org/nexus/ 2. http://mvnrepository.com/ (本人推荐仓库) 3. http://repo ...

  4. Eclipse中Maven项目添加jar包

    各个标签的含义如下: Overview:显示maven项目的一些基本信息Dependencies:添加jar包的页面Plugins:添加maven插件的页面.比如tomcat-maven-plugin ...

  5. 转:maven项目添加jar包.

    很多新手都不知道如何在maven项目里添加jar包. 以前我还没接触maven的时候下载过一个demo,是maven项目. 我居然是照着他的pom.xml文件一个一个的写!!! 很多人认为理所当然的东 ...

  6. maven中在本地maven仓库添加jar包

    Maven 手动添加 JAR 包到本地仓库 Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个人共用,有时候用  ...

  7. 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包

    现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...

  8. 手动添加jar包到本地maven仓库

    我们都知道使用maven管理jar包的时候,我们需要到远程仓库下载相关的jar包到本地仓库,但是如果远程仓库没有这个jar包呢?这时候我们就需要手动将jar包添加到本地仓库. 起因是我想用百度的富文本 ...

  9. maven 如何给web项目添加jar包依赖

      maven 如何给web项目添加jar包依赖 CreateTime--2018年4月19日19:06:21 Author:Marydon 开发工具:eclipse 1.打开pom.xml文件--& ...

随机推荐

  1. oracle插入特殊字符&#39;&amp;&#39;问题

    oracle转义字符开关:set define off   /   show define

  2. IOS Layer的使用

    CALayer(层)是屏幕上的一个矩形区域,在每一个UIView中都包含一个根CALayer,在UIView上的所有视觉效果都是在这个Layer上进行的. CALayer外形特征主要包括: 1.层的大 ...

  3. JavaScripts学习日记——BOM

    IE 3.0 和 Netscape Navigator 3.0 提供了一种特性 - BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执 ...

  4. Python进阶之路---1.2python版本差异

    Python2.*与python3.*版本差异 作为一个初学者,我们应该如何选择python的版本进行学习呢,这两个版本有什么区别呢,接下来让我们简单了解一下,以便我们后续的学习. Python版本差 ...

  5. WebApi2官网学习记录---Content Negotiation

    Content Negotiation的意思是:当有多种Content-Type可供选择时,选择最合适的一种进行序列化并返回给client. 主要依据请求中的Accept.Accept-Charset ...

  6. 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】

    <ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...

  7. javascript判断键盘按键

    window.document.onkeydown = disableRefresh; function disableRefresh(evt){ evt = (evt) ? evt : window ...

  8. JedisPool操作

    Jedis 使用 commons-pool 完成池化实现. 先做个配置文件(properties文件): #最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel ...

  9. 在windows下获取硬盘序列号(win7 32位,Windows Server 64位测试,希望在其他平台测试,遇到问题的网友留言分享)

    #include <Windows.h> #include <stdio.h> // IOCTL控制码 // #define DFP_SEND_DRIVE_COMMAND CT ...

  10. [C入门 - 游戏编程系列] 序言篇

    记得学习C语言的时候,看着别人能写各种各样的小游戏和小软件,甚是羡慕.而自己,虽然说语法都会,但是真正上手写个几百行的代码,就显得力不从心.曾经一度很是郁闷,看过一些书,大都处于教语法的层面,有些涉及 ...