java项目构建工具Maven
---------------------------------------------------------------------------------------------------
title:java project build tool is great maven
author:chinayaosir
blog:http://blog.csdn.net/chinayaosir
qq:44633197
email:chinayaosir@126.com
---------------------------------------------------------------------------------------------------
文章目录
1.1java-maven简介
1.2java-maven来源
1.3java-maven安装
1.4java-maven插件
1.5java-maven命令
1.6java-maven入门
1.7java-maven书籍
---------------------------------------------------------------------------------------------------
1.1java-maven简介
c/c++软件自动编译有makefile,
程序源码管理有cvs,subverion,
linux应用程序管理yum,yast(它们自动管理程序版本和依赖)
windows程序管理有360软件管理
java源码编译有ant,
那么java项目工程里在有没有jar包管理和源码管理,程序编译三合一的优秀工具?
它就是伟大的maven!!!!
随着近两年Maven在国内的普及,越来越多的公司与项目开始接受并使用其作为项目构建与依赖管理工具,
Java开发人员用Maven来管理和维护java软件项目就越来越方便!
Apache Maven是一个基于java的apache ant的构建工具的替代者。
Maven这个单词来自于意第绪语,意为知识的积累,
最早在Jakata Turbine项目中它开始被用来试图简化构建过程。
当时有很多项目,它们的Ant build文件仅有细微的差别,而JAR文件都由CVS来维护。
于是Maven创始者开始了Maven这个项目,该项目的清晰定义包括,
一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。
作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平 台的项目构建、依赖管理和项目信息管理。
无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。
---------------------------------------------------------------------------------------------------
1.2java-maven来源
--------------------------------------------------
java构建
不管你是否意识到,构建(build)是每一位程序员每天都在做的工作。
早上来 到公司,我们做的第一件事情就是从源码库签出最新的源码,然后进行单元测试,
如果发现失败的测试,会找相关的同事一起调试,修复错误代码。
接着回到自己的 工作上来,编写自己的单元测试及产品代码,我们会感激IDE随时报出的编译错误提示。
忙到午饭时间,代码编写得差不多了,测试也通过了,开心地享用午餐然后休息。
下午先在昏昏沉沉中开了个例会,会议结束后喝杯咖啡继续工作。
刚才在会上经理要求看测试报告,于是找了相关工具集成进IDE,
生成了像 模像样的测试覆盖率报告,接着发了一封电子邮件给经理,松了口气。
谁料QA小组又发过来了几个bug,没办法,先本地重现再说,于是熟练地用IDE生成了 一个WAR包,部署到Web容器下,启动容器。
看到熟悉的界面了,遵循bug报告,一步步重现了bug……快下班的时候,bug修好了,提交代码,
通知 QA小组,在愉快中结束了一天的工作。
仔细总结一下,我们会发现,除了编写源代码,
我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等烦琐且不起眼的工作上,这就是构建。
如果我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,
使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有烦琐的步骤都能够自动完成,很快就能得到最终结果。
--------------------------------------------------
Ant就是参考c make的makefle
Ant不是指蚂蚁,而是意指“另一个整洁的工具”(Another Neat Tool),
它最早用来构建著名的Tomcat,其作者James Duncan Davidson创作它的动机就是因为受不了Makefile的语法格式。
我们可以将Ant看成是一个Java版本的Make,也正因为使用了Java,Ant是跨平台的。
此外,Ant使用XML定义构建脚本,相对于Makefile来说,这也更加友好。
与Make类似,Ant有一个构建脚本build.xml,如下所示:
< xml version="1.0" >
build.xml的基本结构也是目标(target)、依赖(depends),以及实现目标的任务。
比如在上面的脚本中,jar目标用来创建应用程序jar文件,该目标依赖于compile目标,
后者执行的任务是创建一个名为classes的文件夹,编译当前目录的java文件至classes目录。
compile目标完成后,jar目标再执行自己的任务。
Ant有大量内置的用Java实现的任务,这保证了其跨平台的特质,同时,Ant也有特殊的任务exec来执行本地命令。
和Make一样,Ant也都是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务。
针对每一个项目,开发者都需要重新编写这一过程,这里其实隐含着很大的重复。
Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,
并且大部分插件都是现成的,开发者只需要声明项目的基本元素,Maven就执行内置的、完整的构建过程。这在很大程度上消除了重复。
Ant是没有依赖管理的,所以很长一段时间Ant用户都不得不手工管理依赖,这是一个令人头疼的问题。
幸运的是,Ant用户现在可以借助Ivy管理依赖。
而对于Maven用户来说,依赖管理是理所当然的
Maven不仅内置了依赖管理,更有一个可能拥有全世界最多Java开源软件包的中央仓库,
Maven用户无须进行任何配置就可以直接享用。
--------------------------------------------------
maven与ant的比较
第一:ant脚本是可以直接运行在maven中的。
maven和ant最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM(project object model)。
这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义,显然maven更胜一筹。
第二:Maven对所依赖的包有明确的定义,如