前言


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



概况


自从项目中引入 Maven 以后,曾经 Ant 能解决的,Maven 提供了更加简洁的解决方式,而曾经 Ant 解决不了的。Maven 也能非常好的解决。这就直接导致了项目管理工具的更新换代。当然,这已不是什么新奇事了。仅仅只是,一直到如今才有时间来分享项目中使用 Maven 的感受。这一点上,真的非常抱歉,兴许会及时的更新。


Maven 的新手教程网上已经有非常多了。这里就不再赘述这些基本知识了。还没有接触过 Maven 的童鞋,请移步 Google 或 Baidu。

之后再回来看这篇文章。在这篇文章里,我主要结合项目中 Maven 的使用,以及须要注意的事项来与大家讨论。



原理


说到 Maven 的原理,事实上非常easy。就是採用远程仓库和本地仓库以及一个类似 build.xml 的 pom.xml,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar,同一个版本号的 jar 仅仅需下载一次。并且避免每一个应用都去拷贝 jar。



同一时候它採用了如今流行的插件体系架构,仅仅保留最小的核心。其余功能都通过插件的形式提供。所以 Maven 下载非常小(1.1M),在运行 Maven 任务时。才会自己主动下载须要的插件。

并且,Maven 还是跨平台的,并且提供了支持非常多 Java IDE 的扩展插件。在开发中,我们大部分的时间,用到的是 Maven 的插件。对于公司内部来说,还是须要建立自己的私服的,只是,这里私服不是重点,就不再讨论了。



结构


项目中我们都会依据自己的习惯创建文件夹结构,尽管有规范。但难免会有疏漏。长此下去,项目的结构会越来越乱的。

Maven 攻克了这个问题,对于不同的项目。它提供了多种选择。并将其作为文件夹模板,例如以下图所看到的。





使用文件夹模板,能够使pom.xml更简洁。由于Maven2已经依据缺省文件夹,提前定义了相关的动作,而无需人工的干预。以resources文件夹为例: 
  • src/main/resources,负责管理项目主体的资源。在使用Maven2运行compile之后,这个文件夹中的全部文件及子文件夹。会拷贝到target/classes文件夹中,为以后的打包提供了方便。

  • src/test/resources。负责管理项目測试的资源。在使用Maven2运行test-compile之后,这个文件夹中的全部文件及子文件夹,会拷贝到target/test-classes文件夹中,为兴许的測试做好了准备。

这些动作在 Maven1 中。是须要在 maven.xml 中使用<preGoal>或<postGoal>来完毕的。现在。全然不须要在pom.xml中指定就行自己主动完毕。

在src和test都使用resources,方便构建和測试,这样的方式本就已是前人的经验。

通过使用Maven2。使这个经验在开发团队中得到普及。



生命周期


在 Maven2 中有了明白的生命周期概念,并且都提供与之相应的命令,使得项目构建更加清晰明了。基本的生命周期阶段:
  • validate,验证project是否正确,全部须要的资源是否可用。

  • verify。执行不论什么检查,验证包是否有效且达到质量标准。
  • integration-test,在集成測试能够执行的环境中处理和公布包。

  • generate-sources,产生应用须要的不论什么额外的源码,如xdoclet。
  • compile。编译项目的源码。
  • test-compile,编译项目測试代码。

  • test,使用已编译的測试代码。測试已编译的源码。
  • package,已公布的格式。如jar,将已编译的源码打包。

  • install。把包安装在本地的repository中,能够被其它project作为依赖来使用。

  • deploy,在整合或者公布环境下执行,将终于版本号的包复制到远程的repository,使得其它的开发人员或者project能够共享。


假设要运行项目编译。那么直接输入: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 ”为keyword搜索,往往第一个链接中,就是你须要的方案。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlsZWU2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

进入第一链接之后。你会看到这样一个页面,搜索的结果都是关于 Spring 的,依据你的须要。选择一个链接进入。列表中有各个版本号的组件,点击你须要的版本号,然后就会看到 Maven 坐标。把它拷贝到你的 pom 文件里就噢啦。




watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlsZWU2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


当然,这仅仅是一种方法,仅仅针对刚接触 Maven 的童鞋们。随着项目经验的增多,以后你就会越来越发现。Maven 解放的不仅仅是你的双手,还有你最宝贵的时间。


感受


在一个项目中选择使用一款管理工具是有风险的。那么该怎样把这样的风险减到最低。或者让它转变为对项目开发有利的一方面呢?这就须要架构师或者项目组长,在项目開始之前进行严格的技术考察、技术(工具)选型、学习成本的分析等。


选择一种技术或者一款工具,不能只由于它的流行程度,还要考虑到本公司开发者的技术程度。技术(工具)的跨平台性考虑,扩展性与集成性的考虑,以及技术(工具)稳定性的考虑等。当然,对于一种新技术(对开发者来说是新技术),还须要考虑学习成本。这些都制约日后的开发效率、开发进度,以及出问题后能不能解决等。

所谓的技术选型,并非选出多么新的技术。也并非选出成本最低的技术,而是可以利用本公司的优势,找出最适合本公司的技术和工具,在有限的范围内、有限的时间内把本公司的能力发挥到最大。


就比方,假设在项目管理工具上,公司里一直都在用 Ant,并且用的也特别的熟练,况且项目的时间特别紧急。公司的开发者对 Maven 都没有接触过。那么就不用再考虑 Maven 了。由于时间在那摆着呢。并且还有开发者的学习成本。这样的情况下再选择 Maven,这不是 zuo si 吗?当然,这样的样例不胜枚举。这里就不再多说了。


结束语


本来应该在最后说的话,都放在了感受里边。对于项目管理。还有非常多欠缺的,希望在日后的工作中继续积累经验吧。当然,也希望大家可以多交流,共同进步。


版权声明:本文博客原创文章,博客,未经同意,不得转载。

向西项目管理工具Maven一片的更多相关文章

  1. ③---Java项目管理工具MAVEN安装与配置

    Java项目管理工具MAVEN安装配置以下将为大家介绍Java项目管理工具MAVEN安装及其配置. 一.下载MAVEN安装文件 maven下载地址:https://maven.apache.org/d ...

  2. 关于项目管理工具 maven

    众所周知,maven是目前很常用的项目管理工具.一般情况下,通过在pom.xml添加相应内容,再maven-->update就会自动把相应的jar包下载.配置好,非常方便. 一般每新建一个wor ...

  3. idea集成项目管理工具 --- Maven 并且【配置tomcat】

    介绍: 1.项目管理工具 POM    Porject Object Model 2.可以管理项目中的的jar包依赖 3.maven   jar包中央仓库:http://mvnrepository.c ...

  4. 《从零开始搭建游戏服务器》项目管理工具Maven

    简介 什么是Maven?Maven是一个项目管理和综合工具,提供了开发人员构建一个完整的生命周期框架. Maven使用标准的目录结构和默认构建生命周期,在多个开发团队环境时,Maven可以设置按标准在 ...

  5. java项目管理工具maven使用初级

    一.前言        早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档.发现这些文档的作者都是java 的大腕,大多都是站在掌握了一定maven 基础 ...

  6. 项目管理工具Maven的安装与使用

    一.Maven的简介 1. 什么是maven 是Apache下的一个开源的项目,是纯java编写,并且只是用来管理java项目. 2. Maven的好处 maven项目管理jar节省磁盘空间 一键构建 ...

  7. Java 项目管理工具 - Maven

    类似于 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 来管理依赖关系. 实际上,Maven 负责管理 Java 项目开发过程中的几乎所有的东西: 版本控制:Ma ...

  8. 项目管理工具Maven的安装

    首先下载maven http://maven.apache.org/download.cgi 然后解压到不含中文和空格的目录,我直接解压到了D盘 然后添加环境变量: MAVEN_HOME:D:\apa ...

  9. 项目管理工具- Maven

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3. ...

随机推荐

  1. linux上安装配置vsftpd(转)

    转自:http://www.webarch.org/category/linux生产环境是Centos5.6,由于需要提供ftp服务,就找了一款比较小巧的ftp服务器端软件,vsftpd(vsftpd ...

  2. MVC 检测用户是否登录

         当我们访问一个网站的需求检測用户是否已经登录(通过Session是否为null),我们知道在WebForm中能够定义一个BasePage类让他继承System.Web.UI.Page,重写它 ...

  3. Android菜鸟的成长笔记(17)—— 再看Android中的Unbounded Service

    原文:Android菜鸟的成长笔记(17)-- 再看Android中的Unbounded Service 前面已经写过关于startService(Unbounded Service)的一篇文章:&l ...

  4. JDBC连接数据库 prepareStatement

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  5. 浅谈web网站架构演变过程(转)

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

  6. GitLab一键式安装bitnami

    https://bitnami.com/stack/gitlab/installer https://bitnami.com/redirect/to/96764/bitnami-gitlab-8.5. ...

  7. Vertica: 基于DBMS架构的列存储数据仓库

    介绍 Vertica(属于HP公司),是一个基于DBMS架构的数据库系统,适合读密集的分析型数据库应用,比方数据仓库,白皮书中全名称为VerticaAnalytic Database.从命名中也可以看 ...

  8. 高仿淘宝送货地址暴走漫画系列(附demo)

    演讲: 我是个程序员,一天我坐在路边一边喝水一边苦苦检查bug. 这时一个乞丐在我边上坐下了,開始要饭,我认为可怜.就给了他1块钱. 然后接着调试程序.他可能生意不好,就无聊的看看我在干什么.然后过了 ...

  9. JS达到Web指定保存的和打印功能的内容

    背景 首先,说说文章的背景.近期手中的一个项目,因为需求中要求提供Web界面的打印功能.当然假设没有打印机,还能够提供保存到本地.项目组长把这个"小任务"分给了我.本着努力为组长分 ...

  10. 在java代码中获取JVM参数(转)

    近日关注性能调优,关注JMX,发现java.lang.management.*之强大.同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考: MemoryMXBean memorymbean ...