我们平时在开发中,经常会用到maven,有时候接触到的引入jar包的功能,有时候接触到的是编译,打包的功能。那maven到底是干啥的呢?
什么是maven?
maven是一个跨平台的项目管理工具,可以实现项目的构建、依赖管理、项目信息管理等功能。
在项目构建方面,maven可以自动化构建过程,清理、编译、测试、生成报告、打包、部署。
在依赖管理方面,maven引入了坐标的概念,自动化解析任何一个java构件,引入依赖的jar包。
在项目信息管理方面,maven可以帮助我们管理分散在项目各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。而且通过Maven自动生成的站点,我们还能轻松获得项目文档、测试报告、静态分析报告、源码版本日志报告等非常具有价值的项目信息。
为什么需要maven?
在maven之前,管理项目很麻烦,而且项目不规范,结构不统一。如果要编译、测试、打包,还需要手工一步步的操作。在引入项目依赖的时候,一般都是网上搜索依赖的jar包,然后下载下来,放到项目里,比较麻烦,还经常有版本的问题。
除了maven,还有Make、Ant等工具,Make算是最早的构建工具了,由Makefile脚本文件驱动,语法不是很友好,而且Make和操作系统绑定,很难实现跨平台。Ant(Another Neat Tool)“另一个整洁的工具”,可以看成是Java版本的Make,Ant是跨平台的,使用xml定义构建脚本,但是Ant没有依赖管理,用户需要手动管理依赖,或者借助Ivy管理依赖。
Make和Ant都是过程式的,开发者显示的指定每一个目标和需要执行的任务,针对每个项目,都需要重复这一个操作。Maven是声明式的,项目构建各个过程都由插件时间,开发者只需要声明项目基本的元素,maven就可以自动执行完整的构建过程。
综上所述,使用maven可以更好的管理项目,自动的完成项目构建、项目依赖等各方面的工作,效率较高。
新建一个maven项目
接下来,新建一个maven项目,开始我们的学习。
在idea上选择新建一个项目,然后选择maven:
然后点击next,进入下一步:
在这里,有三个选项,GroupId,ArtifactId和Version。
GroupId定义了项目属于哪个组,一般和项目所在的组织或公司存在关联。
ArtifactId定义了项目在组中唯一的id,一般就是项目名。
Version定义了版本号。如果version说明是xxx-SNAPSHOT说明这是一个快照,该项目还处于开发中,是不稳定的版本。
我们这里就写GroupId是com.baidu.test,ArtifactId起名为maven-test。Version是自动生成的。写好之后,点击next。
这里会让选择project name,还选择项目的位置。
填写完成之后,点击Finish,maven项目就新建完了。
可以看到项目的结构:
每个maven项目都有个pom.xml,POM(Project Object Model,项目对象模型)是Maven的核心。
Maven对于项目目录结构,测试用例命名方式都有既定的规则,约定优于配置。
从目录结构中可以看到,在src下,有两个目录,一个main,一个test。这就是maven定义好的目录结构,主代码写在src/main/java目录下,测试的代码写在src/test/java目录下。测试代码只在运行测试时会用到,不会被打包。
参考资料:
1.《maven实战》 许晓斌 著