一.Maven的安装配置

1.maven是什么

maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。当前使用Maven的项
	目在持续增长。


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

2.传统项目构建过程

传统的使用IDEA构建项目的过程如下:

构建过程如下:
	1)在IDEA中创建一个java web工程
	2)在工程中编写源代码及配置文件等
	3)对源代码进行编译,java文件编译成class文件
	4)执行Junit单元测试
	5)将工程打成war包部署至tomcat运行

Maven 编译插件 maven编译项目_python

3.maven项目构建过程

maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过
程的一些阶段,后面章节详细介绍每个阶段,这里先大概了解下:

Maven 编译插件 maven编译项目_python_02

上图中部分阶段对应命令如下:
清理阶段对应maven的命令是clean,清理输出的class文件
编译阶段对应maven的命令是compile,将java代码编译成class文件。
打包阶段对应maven的命令是package,java工程可以打成jar包,web工程可以打成war包

运行一个maven工程(web工程)需要一个命令:tomat:run

maven工程构建的优点:
1、一个命令完成构建、运行,方便快捷。
2、maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

4.什么是依赖管理

什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。
	举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,
	具体它依赖的Hibernate、Spring、Struts2。
	什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。

5.传统项目的依赖管理

传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,如下图:程序员手工将Hibernate、struts2、spring的jar添加到工程中的WEB-INF/lib目录下。


手工拷贝jar包添加到工程中的问题是:
1、没有对jar包的版本统一管理,容易导致版本冲突。
2、从网上找jar包非常不方便,有些jar找不到。
3、jar包添加到工程中导致工程过大。

Maven 编译插件 maven编译项目_java_03

6.maven项目的依赖管理

maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven
工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:


使用maven依赖管理添加jar的好处:
1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2、maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven工程可以自动从maven仓库下载jar包,非常方便。

Maven 编译插件 maven编译项目_java_04

7.使用maven的好处

通过上边介绍传统项目和maven项目在项目构建及依赖管理方面的区域,maven有如下的好处:

1、一步构建
maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
2、依赖管理
maven工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
3、maven的跨平台,可在window、linux上使用。
4、maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。

二.Maven的下载使用

1.Maven的下载

从该网站 http://maven.apache.org/download.cgi下载

Maven 编译插件 maven编译项目_Maven 编译插件_05


安装-解压即可 注意不要解压在中文路径下下面是解压后的目录

Maven 编译插件 maven编译项目_Maven 编译插件_06

2.环境变量的配置

配置Maven

在环境变量中 新建变量名MAVEN_HOME 值为Maven的安装路径

然后在PATH中引用你的MAVAEN_HOME 如下图

Maven 编译插件 maven编译项目_maven_07


查看是否配置成功可在黑窗口中输入 mvn –v 出现如下图所示说明配置成功

如果有时出现不是本地命令,也不是本地命令,可以用管理员身份打开黑窗口

Maven 编译插件 maven编译项目_python_08

二.maven仓库

1.概述

maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过
maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地
仓库 就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已
经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。


下图描述了maven中仓库的类型:

Maven 编译插件 maven编译项目_Maven 编译插件_09

2.本地仓库

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找 
默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows用户目录。

Maven 编译插件 maven编译项目_maven_10

3.远程仓库

远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。

4.中央仓库

中央仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的
jar包,它包含了世界上大部分流行的开源项目构件。

三.Maven常用命令介绍

1.概述

注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的
pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。

Maven命令列表
mvn –version	显示版本信息
mvn clean	清理项目生产的临时文件,一般是模块下的target目录
mvn compile	编译源代码,一般编译模块下的src/main/java目录
mvn package	项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test	测试命令,或执行src/test/java/下junit的测试用例.
mvn install	将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy	将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site	生成项目相关信息的网站
mvn eclipse:eclipse	将项目转化为Eclipse项目
mvn dependency:tree	打印出项目的整个依赖树  
mvn archetype:generate	创建Maven的普通java项目
mvn tomcat:run	在tomcat容器中运行web应用 需要插件支持

mvn jetty:run	调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用

2.生命周期(了解)

maven对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是: 

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。

Maven 编译插件 maven编译项目_spring_11

四.Maven项目工程目录约定(重要)

使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下:

src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
src/test/java —— 存放所有单元测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class文件会输出到此目录
pom.xml——maven项目核心配置文件

Project
  |-src
  |   |-main
  |   |  |-java        —— 存放项目的.java文件
  |   |  |-resources   —— 存放项目资源文件,如spring, hibernate配置文件
         |-webapp     —— webapp目录是web工程的主目录
            |-WEB-INF
              |-web.xml
  |   |-test
  |      |-java        ——存放所有测试.java文件,如JUnit测试类
  |      |-resources   —— 测试资源文件
  |-target             —— 目标文件输出位置例如.class、.jar、.war文件
  |-pom.xml           ——maven项目核心配置文件

重要的事情说三遍 Maven工程的目录结构必须遵循上面的结构
我们可以手动去创建Maven的目录结构
当然我们一般是通过软件帮我们创建的,不管是软件创建,还是手动创建,都必须遵循Maven的目录结构
如图所示 IDEA 创建出来的Maven项目结构如下

Maven 编译插件 maven编译项目_python_12

2.pom.xml 文件

一个maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。

(1) 依赖管理系统(Dependency Management System)

通过maven的依赖管理对项目所依赖的jar 包进行统一管理。
比如:项目依赖junit4.9,通过在pom.xml中定义junit4.9的依赖即使用junit4.9,如下所示是junit4.9的依赖定义:
<dependencies>
	<!-- 此项目运行使用junit,所以此项目依赖junit -->
	<dependency>
		<!-- junit的项目名称 -->
		<groupId>junit</groupId>
		<!-- junit的模块名称 -->
		<artifactId>junit</artifactId>
		<!-- junit版本 -->
		<version>4.9</version>
		<!-- 依赖范围:单元测试时使用junit -->
		<scope>test</scope>
	</dependency>

(2) 一个项目生命周期(Project Lifecycle)

使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven
将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段:

Maven 编译插件 maven编译项目_Maven 编译插件_13

maven通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行mvn compile执行编译、执行mvn clean执行清理。

(3) 一组标准集合

maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结
构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。

(4) 插件(plugin)目标(goal)

maven 管理项目生命周期过程都是基于插件完成的。

3.定义maven坐标

每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,比如:
入门程序的坐标定义如下:
<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>org.westos</groupId>
<!-- 模块名称 -->
<artifactId>maven-first</artifactId>
<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包类型
	jar:执行package会打成jar包
	war:执行package会打成war包
	   pom :用于maven工程的继承,通常父工程设置为pom

五.使用IDEA来开发Maven项目

1.首先IDEA中配置Maven

Maven 编译插件 maven编译项目_python_14


Maven 编译插件 maven编译项目_Maven 编译插件_15


2.使用IDEA创建一个Maven项目

File-New-Project 弹出如下窗口 –选择Maven项目

Maven 编译插件 maven编译项目_Maven 编译插件_16


继续下一步

Maven 编译插件 maven编译项目_python_17


继续下一步

Maven 编译插件 maven编译项目_spring_18


继续下一步

Maven 编译插件 maven编译项目_spring_19


IDEA开始创建Maven项目,你如果第一次创建,要联网,要下载一些插件,你耐心等待

Maven 编译插件 maven编译项目_java_20

Maven项目创建好后,我们看一下目录结构,发现,有的目录IDEA并没有帮我们自动创建

需要我们手动创建,注意手动创建要符合Maven规定的目录结构

Maven 编译插件 maven编译项目_spring_21


然后手动创建目录test和main目录

2.IDEA对Maven项目的管理

一般 Maven 的项目我们都可以脱离 IntelliJ IDEA 的项目配置功能进行独立的管理和构建的,当然我们可以通过 IntelliJ IDEA 提供的 Maven 管理工具进行项目的管理和构建

Maven 编译插件 maven编译项目_spring_22


Maven 编译插件 maven编译项目_spring_23


servlet引入jar包

Maven 编译插件 maven编译项目_python_24

3.配置Tomcat插件

下来我们可以通过tomcat插件发布我们的项目
我们得在pom.xml文件的标签内部配置一个tomcat插件

<!-- 配置Tomcat插件 -->
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>

<configuration>
  <!--端口控制-->
  <port>9090</port>
  <!--项目路径控制意味着http://localhost:8080/abc-->
  <path>/abc</path>
  <!--编码-->
  <uriEncoding>UTF-8</uriEncoding>
</configuration>

</plugin>

在maven项目里选择:

Maven 编译插件 maven编译项目_java_25


注意运行之前检查你的pom.xml文件中 jsp的jia包和 servlet的jar包坐标的依赖范围要写上成功发布出现下图

Maven 编译插件 maven编译项目_Maven 编译插件_26

4.依赖范围的介绍

添加jar包的坐标时,还可以指定这个jar包将来的作用范围

Maven 编译插件 maven编译项目_spring_27


Maven 编译插件 maven编译项目_Maven 编译插件_28


Maven 编译插件 maven编译项目_maven_29