什么是Maven

Maven 

Maven: Apache组织的一款开源项目,目的是为了服务于基于Java
              平台的项目构建、依赖管理和项目信息管理。
构建:编译、运行单元测试、生成文档、打包、部署等等这些工作。
作为构建工具:Maven可以自动完成构建的过程。
优点:
               ①避免重复构建的过程。
               ②标准化构建的流程。
不仅作为构建工具:Maven还是一个依赖管理和项目信息管理的工具。
体现:
               ①提供了中央仓库,帮助开发者自动下载构件(jar包)。Maven利用坐标定位构件(通过Nexus可以对Maven仓库进行快速搜索,定位坐标)。
               ②管理项目信息。如:项目名、开发者列表、版本控制系统地址、许可证、缺陷管理地址等。
还能轻松获取项目文档、测试报告、静态分析报告、源码版本日志报告等信息。

配置Maven


1.配置maven环境变量:

        系统变量:MAVEN_HOME = C:\apache-maven-3.2.5

        系统变量:path = %MAVEN_HOME%\bin

2.测试打开 cmd,在里面敲:mvn –version    弹出maven版本等信息说明成功

3.修改 maven 本地仓库存放位置

        默认是放在本地用户的临时文件夹下面的 .m2 文件夹下的 repository 下

        找到 maven目录下的 conf 下的 settings.xml 配置文件

maven导入whtmltopdf_maven导入项目


更改本地仓库地址:我放在了E:\test下了

maven导入whtmltopdf_maven配置_02



  settings.xml说明


仓库: maven项目中依赖的jar包存放的地方.
4.配置代理服务器(可选)

如果公司使用HTTP代理服务器来阻止用户直接连接到互联网。这时需要配置代理服务器Maven才能下载依赖。

创建项目骨架
1.创建项目目录,进入项目目录后执行mvn archetype:generate
    首次运行时,mvn会从远程"中央仓库"下载一些必需的文件到"本地仓库“
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)

5: 1.0 6: 1.1 Choose a number: 6: (直接回车)

Define value for property 'groupId': : cnblogs (可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写) Define value for property 'artifactId': : maven-hello-world (组件名称,可暂时理解成项目名称) Define value for property 'version':  1.0-SNAPSHOT: : (版本号,直接回车,默认1.0-SNAPSHOT) Define value for property 'package':  cnblogs: : (打包后的jar文件名)
 Y: :  (直接回车确认)
 BUILD SUCCESS (看到这个,表示项目创建成功!)


groupId是帮助项目对象在仓库中定位的
  artifactId决定了生成的项目文件夹目录的名称
  version是项目版本号
        package 是项目source文件下最顶层的包名


查看maven项目的目录结构

maven导入whtmltopdf_maven导入whtmltopdf_03


            进入maven项目目录 执行:tree

maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。这是全世界maven项目的通用约定



编译项目

            mvn clean compile  这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息

maven导入whtmltopdf_maven导入whtmltopdf_04

单元测试
             mvn clean test
会先执行compile,即先编译,再执行单元测试
项目打包
             通常我们会把java项目打包成jar包或war包,maven中打包的命令为  “mvn clean package” 运行完后,会在target目录下生成jar包
注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包

eclipse创建项目

1. 安装m2eclipse插件   要用Eclipse构建Maven项目,我们需要先安装meeclipse插件   点击eclipse菜单栏Help->Eclipse Marketplace搜索到插件Maven Integration for


maven导入whtmltopdf_maven导入whtmltopdf_05

等待安装Maven插件

maven导入whtmltopdf_maven配置_06

创建Maven项目

maven导入whtmltopdf_maven基础_07

选择创建项目类型

创建web项目选择下面这个

maven导入whtmltopdf_maven导入whtmltopdf_08

maven导入whtmltopdf_maven创建项目_09

groupId是帮助项目对象在仓库中定位的
artifactId决定了生成的项目文件夹目录的名称
version是项目版本号
package 是项目source文件下最顶层的包名

右键项目配置版本


Maven项目导入

maven导入whtmltopdf_maven创建项目_10


maven导入whtmltopdf_maven基础_11

项目导入或创建成功后可以看到如上图所示

maven导入whtmltopdf_maven创建项目_12



Maven如何管理Jar包



Maven通过pom.xml文件中坐标管理jar包
Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId,artifactId,version,packaging,class-sifer。下面是一组坐标定义

maven导入whtmltopdf_maven配置_13

Maven下载jar包的过程

maven导入whtmltopdf_maven创建项目_14

私库 : 有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。


Maven中会涉及到几种仓库

1.工作空间 ,在我们Maven项目中可以看到pom.xml文件,pom.xml就是maven的配置文件

2 .本地仓库,本地仓库用于存放jar包,其实Jar包并不是直接放入工作空间的,它是存放在本地仓库,然后在执行发布打包的时候,添加依赖路径

3 私库:私库是使用者自己搭建的maven仓库,用于缓解频繁从外网下载jar包资源的压力。而且使用私库作为缓存层,也相对安全一些。

4 共享仓库:书中所说的中央仓库或者一些常用的镜像网站都属于这种,国内比较著名的oschina以及163都是不错的maven仓库。



1 Maven在执行相关的任务时,会先去本地仓库查看是否有该资源,如果有的话,判断版本是否正确,如果一切都没问题则直接使用;否则,执行下一步

2 Maven会去配置的共享仓库中查找,如果找到就拷贝到本地仓库中;找不到则会给出相关的提示

3 Maven在本地如果搭建了私库,则会去私库中查找,找到就拷贝到本地仓库;找不到就会去共享仓库中查找,然后放入私库和本地库。有了私库,局域网内的开发者可以共享依赖,就不用每个人都去外网下载jar包,浪费带宽了。




Maven的生命周期与阶段



Maven中有三大生命周期,他们相互独立,分别是:
          1 .clean 清理
          2 .default 构建
          3 .site 建站
一般来说,clean和default比较常用。
每个生命周期又有不同的阶段,阶段按顺序执行,并且可以指定执行结束的阶段。构建的时候,会依次从最上面的阶段执行到指定的那个阶段。

clean 生命周期

      clean生命周期的目的是清理项目,它包含三个阶段:

     1)pre-clean 执行一些清理前需要完成的工作。

     2)clean 清理上一次构建生成的文件。

     3)post-clean 执行一些清理后需要完成的工作。



当我们输入mvn clean的时候,执行的是pre-clean和clean两个阶段。


default 生命周期

       default生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:

       1) validate 验证项目是否正确和所有需要的相关资源是否可用

       2) initialize 初始化构建

       3) generate-sources

       4)   process-sources 处理源代码

       5) generate-resources 

       6)   process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。

       7) compile 编译项目的主源代码

       8) process-classes

       9)   generate-test-sources

       10) process-test-sources 处理项目测试资源文件

       11)generate-test-resources

       12)  process-test-resources 处理测试的资源文件

       13)test-compile 编译项目的测试代码

       14)process-test-classes

       15)  test 使用单元测试框架运行测试,测试代码不会被打包或部署
       16)prepare-package 做好打包的准备
       17)package 接受编译好的代码,打包成可发布的格式
       18)  pre-integration-test
       19)  integration-test
       20)  post integration-test
       21)  verify
       22)  install 将包安装到Maven本地仓库,供本地其他Maven项目使用
       23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

site 生命周期

      site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:

      1)pre-site 执行一些在生成项目站点之前需要完成的工作

      2)site 生成项目站点文档

      3)post-site 执行一些在生成项目站点之后需要完成的工作

      4)site-deploy 将生成的项目站点发布到服务器上


当执行mvn install的时候,实际会执行validate-->initialize-->...-->verify-->install等二十几个阶段。
            为了操作方便,不同的声明周期可以在一起执行,比如mvn clean install,会先执行clean的阶段,在执行install的阶段。


            开发环境中,当我们Run as的时候,就可以执行maven clean进行清理,或者执行maven install进行构建,也可以执行maven build同时执行clean和install两个任务。