Maven——什么是Maven

488 阅读3分钟

原文日期:2016-04-15


使用Maven有一段时间了,给我带来了许多帮助。比如不需要去各大网站去搜索需要的jar包,基本上在pom配置文件中添加该jar包的坐标依赖即可;打包方便,只需一个命令mvn clean package,即可完成。。。然而当有人问起我你用过maven吗?你知道maven是做什么的吗?我去,我开始疑惑了。你妹,这啥问题,maven不就是一个管理jar包的工具吗!这问题还需要回答吗???然而事后思考,发现这样回答很不正式,非常业余。经过翻查相关资料,找到比较合适的解释:Maven是一个管理项目依赖的构建工具。何为构建,即Java哥哥每天做的事——清理编译、编译、单元测试、打包、发布。何为项目依赖,简单点说就是管理Jar包啦。

项目构建?

上面一提到,项目构建是程序开发中的清理编译、编译、单元测试、打包、发布。那Maven是怎么做到的?Maven提供一系列命令来完成这些事。当我们使用如下命令来执行Maven项目,控制台将会输出调用对应插件去完成相应的事情。

mvn clean:调用clean插件去清理当前项目,即删除项目路径下的target目录

mvn compile:调用resource插件的resources命令编译项目资源文件(src/main/resources),再调用compile插件的compile命令编译当前项目Java文件(src/main/java)。

mvn test:调用resource插件的testResources命令编译资源文件,再调用compile插件的testCompile命令编译Java文件,最后调用surefire插件的test命令执行单元测试。

mvn package:该命令相当于调用mvn compile去编译项目,再调用mvn test进行单元测试,最后调用对应打包插件(比如jar插件)将项目打包。

mvn install:该命令相当于在执行完mvn package命令后,再调用install插件将项目安装到本地Maven仓库中。

mvn deploy:该命令相当于在执行完mvn install命令后,再将项目打成的包文件上传到maven私服上,以供大家使用。

项目依赖?

Maven是如何管理项目的依赖呢?Maven中约定必须给每个Maven项目赋予一个坐标,并且是唯一的,否则会造成项目依赖混乱。那什么是Maven坐标呢,Maven坐标有哪些属性,是XYZ吗?大家都知道立体几何中的坐标XYZ是为了确定一个点在空间的位置,并且这个点是唯一的。其实Maven坐标作用亦是如此,为了确立当前项目在Maven仓库世界里唯一。

用过Maven的人都应该熟悉以下xml

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.0.2.RELEASE</version>
</dependency>

该段xml的信息就是在描述Spring的Core jar包在Maven仓库的位置。它是由Spring提供,Spring组织按照Maven的约定来定义。其中groupId我们一般称之为项目集合或项目组代号,artifactId是该项目集合下的一个项目代号,version是该项目的版本号。这三个属性是必输的,并且通过这三个属性可以确认一个项目的位置。当然Maven还定义了两个非必需属性packaging、classifier。其中packaging定义了Maven项目的打包方式,有jar、war等方式,默认为jar。classifier是属于当前项目的附属构件,比如项目文档、源码等,可忽略。