maven简介

  • maven是apache下的一个开源项目,是纯java开发,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理,并且只是用来管理java项目。

项目构建

项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署的过程。


下面对比一下传统java web项目的构建与maven构建web项目的区别。

1、传统构建方式:

java maven的好处 maven和普通的java项目的区别_java

结合上图传统项目的构建过程可分为一下4步(以eclipse工具为例):

(1)在eclipse中新建java web工程。

(2)在工程中编写源代码及配置文件。

(3)对源码进行编译,将java文件编译成class文件。

(4)执行Junit单元测试。

(5)将工程打成war包部署在tomcat服务器运行。

2、maven构建方式:

maven将项目构建的过程进行了标准化(即生命周期方式),每个阶段使用了一个命令完成,如下图所示:

java maven的好处 maven和普通的java项目的区别_jar包_02

上图各个阶段对应的命令如下:

(1)清理对应maven中clean,清理输出的class文件(下文会说明)。

(2)编译阶段对应maven中的compile,即将java文件编译成class文件。

(3)打包阶段对应maven中的package,java工程可以打包成jar,web工程可以打包成war,同时还可以打包成pom形式(项目整合)。

(4)部署阶段,maven中在本地开发过程中提供了一个便携式部署方式,执行tomcat:run命令即可。

3、目录对比说明

maven工程具有一定的目录规范,即:

  • src/main/java ------ 存放项目的.java文件。
  • src/main/resources-------存放项目的资源文件,如spring,hibernate的配置文件。
  • src/test/java------存放所有单元测试.java文件,如Junit测试类。
  • src/test/resources-------测试资源文件。
  • target--------------项目输出目录,编译后的class文件,及测试结果以及打包程序等。
  • pom.xml---------------maven项目核心配置文件。

java maven的好处 maven和普通的java项目的区别_java_03

java maven的好处 maven和普通的java项目的区别_java maven的好处_04

依赖管理

什么是依赖?本人理解为:一个java项目会使用第三方的jar包才能运行,则该java项目依赖于这些第三方的jar包。例如:一个crm项目,项目用到SSH框架, 则该crm项目依赖SSH框架,具体依赖于Struts2、Hibernate、Spring。

依赖管理就是对项目开发过程中依赖的jar包进行规范化管理。

  • 传统项目工程要管理项目开发过程中用到的所有jar包(人工完成)。开发者需要从互联网下载所需的各种jar包导入到需要的项目中(WEB-INF下的lib目录),如下图:
  • java maven的好处 maven和普通的java项目的区别_java_05

  • maven项目所依赖的kar包不需要手动向工程中添加,只需要在pom.xml文件中添加主要的jar包配置即可,有maven工具自动来管理所需要的工具包(包括后续的编译、运行、打包)。如下图所示:

java maven的好处 maven和普通的java项目的区别_jar包_06

常用的maven命令

在cmd下应用

  • mvn compile 作用:将src/main/java下的文件编译为class文件输出在target目录下(注意src/test/java目录下的文件不进行编译,开发过程注意根据功能划分目录)。
  • mvn test 作用:执行src/test/java下的测试类。
  • mvn clean 作用:删除target目录下的内容。
  • mvn package 作用:针对java工程则将工程打成jar包,针对web工程则将工程打成war包。
  • mvn install 作用:将项目打成jar包或者war包并发布到本地仓库。
  • mvn deploy 作用:将最终生成的包复制到远程仓库。

注意:maven命令可以拼接使用,如:mvn clean compile

生命周期说明

maven对于项目构建过程分为三套相互独立的生命周期,分别是:

  • Clean Lifecycle 在进行真正的构建之前对项目进行清理工作。
  • Default Lifecycle 项目构建的核心部分,编译,测试,打包,部署等等。(常用)
  • Site Lifecycle 生成项目报告,站点等信息。

理解maven的作用范围

  • compile(编译),即编译是需要,测试时需要,运行时需要,打包时需要 ,可以参照spring包的使用。
  • provided,即编译时需要,测试时需要,运行时不需要,打包时不需要,可以参照servlet-api的使用。
  • runtime,即编译时不需要,测试时需要,运行时需要,可以参照数据库驱动包的使用。
  • test,即编译时不需要,测试时需要,运行时不需要,打包是不需要,可以参照Junit的使用。

注意:默认scope属性值为compile。