maven介绍

发表时间:2017-07-18 18:52:23 浏览量( 81 ) 留言数( 0 )

学习目标:

1、了解Maven的历史

2、了解Maven的作用

3、了解Maven的基本命令


学习过程:

一、maven介绍

Apache Maven是一个管理和理解软件项目的一个工具,是基于项目对象模型(POM:project object model),Maven 可以管理、生成报告和相应文档的软件管理工具。         Maven原来的意思是知识的积累,原来是想在 Jakarta Turbine 项目使用更加简单的构建项目的一个工具。在Maven之前可能大家使用更多的是Ant工具,但是不同的项目可能会有不同的Ant文件定义,可能还需要导入不同的jar包,不同的项目之间差异性比较大,那有没有这么一个工具可以定义一个标准来构建项目,于是Maven就这样设计出来了。

二、Maven的目标

Maven的主要目标是为开发人员提供一个完整的项目管理,以提高开发人员的效率,使用Maven可以让你:

1、项目的建立过程更简单。

2、提供一个标准的建立系统。

3、提供高质量的项目信息。

4、为良好开发提供指导。

在使用Maven的过程中你会有更多的体会,比如可以让你方便的维护jar包,自动维护jar包的依赖关系,你再也不需要为缺包抛出异常而烦恼,Maven还提供了很多可以复用的脚本代码,提高你的开发效率等等。

三、为什么需要Maven        

Maven不是Java领域唯一的构建管理的解决方案。本节将通过一些简单的例子解释Maven的必要性,并介绍其他构建解决方案,如IDE、Make和Ant,并将它们与Maven进行比较。

IDE不是万能的,当然,我们无法否认优秀的IDE能大大提高开发效率。当前主流的IDE如Eclipse和NetBeans等都提供了强大的文本编辑、调试甚至重构功能。虽然使用简单的文本编辑器和命令行也能完成绝大部分开发工作,但很少有人愿意那样做。然而,IDE是有其天生缺陷的:

IDE依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作。手工劳动往往意味着低效,意味着容易出错。

很难在项目中统一所有的IDE配置,每个人都有自己的喜好。也正是由于这个原因,一个在机器A上可以成功运行的任务,到了机器B的IDE中可能就会失败。

我们应该合理利用IDE,而不是过多地依赖它。对于构建这样的任务,在IDE中一次次地点击鼠标是愚蠢的行为。Maven是这方面的专家,而且主流IDE都集成了Maven,我们可以在IDE中方便地运行Maven执行构建。

Make将自己和操作系统绑定在一起了。也就是说,使用Make,就不能实现(至少很难)跨平台的构建,这对于Java来说是非常不友好的。此外,Makefile的语法也成问题,很多人抱怨Make构建失败的原因往往是一个难以发现的空格或Tab使用错误。

Ant不是指蚂蚁,而是意指“另一个整洁的工具”(Another Neat Tool),它最早用来构建著名的Tomcat,其作者James Duncan Davidson创作它的动机就是因为受不了Makefile的语法格式。我们可以将Ant看成是一个Java版本的Make,也正因为使用了Java,Ant是跨平台的。此外,Ant使用XML定义构建脚本,相对于Makefile来说,这也更加友好。

Ant是没有依赖管理的,所以很长一段时间Ant用户都不得不手工管理依赖,这是一个令人头疼的问题。幸运的是,Ant用户现在可以借助Ivy管理依赖。而对于Maven用户来说,依赖管理是理所当然的,Maven不仅内置了依赖管理,更有一个可能拥有全世界最多Java开源软件包的中央仓库,Maven用户无须进行任何配置就可以直接享用。

四、Maven的常用命令

虽然我们还没有正式的学习Maven,但是记住一些常用命令编辑对我们以后的学习会有很多的好处,这里先列出一些常用的Maven命令。大家可以先记住以下。

mvn archetype:create 创建Maven项目

mvn compile 编译源代码

mvn deploy 发布项目

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn site 生成项目相关信息的网站

mvn clean 清除项目目录中的生成结果

mvn package 根据项目生成的jar

mvn install 在本地Repository中安装jar

mvn eclipse:eclipse 生成eclipse项目文件

mvnjetty:run 启动jetty服务

mvntomcat:run 启动tomcat服务

mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类