一、安装配置
    mvn help:system 从中央库中下载资源
二、下载m2e
    在 eclipse>help>install配置
     注意:eclipse 4.5及以上版本,自带maven插件,在下载安装m2e之间,需将自带的卸载掉。
三、创建hello world
    1.mvn clean compile 工程编译
        编译文件放到工程 target/classes
    2.mvn clean test 工程测试文件编译
        测试文件放到工程 target/test-classes
    3.mvn clean package 工程打包
        打包到工程  target 下面
    4.mvn clean install 工程安装 
        安装到本地仓库,一般路径:C:\Users\{用户}\.m2\repository
    5.mvn clean deploy 将项目构建输出的构件部署到配置对应的远程仓库。
        如果项目当前的版本是快照版本,则部署到快照版本仓库地址,否则就部署到发布版本仓库地址。
    6.mvn clean install-U 
        使用命令行-U参数强制让Maven检查更新
    7.mvn dependency:list 已解析依赖
      mvn dependency:tree 依赖树
      mvn dependency:analyze 分析当前项目的依赖
    
    8.mvn install -Dmaven.test.skip=true 跳过执行测试
    9.mvn help:describe -Dplugin:org.apache.maven.plugins:maven-compiler-plugin:2.1
        获取插件详细信息
四、中央资源库
    官方中央资源库
    http://repo1.maven.org/maven2
五、使用 Archetype 生成项目的骨架,也就是工程的基本目录结构和pom.xml文件
    archetype:原型
    Maven3:mvn archetype:generate
    Maven2:mvn org.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
    
六、邮箱配置    
    email.protocol=smtps 
    email.host=smtp.qq.com
    email.port=587
    email.username=
    email.password=
    email.auth=true
    email.systemEmail=
    
    
七、依赖调解
    第一原则:路径最近则优先。
        A->B->C->X(1.0) X(1.0)的路径长度为3
        A->D->X(2.0) X(2.0)的路径长度为2
        选X(2.0)
    第二原则:第一声明者优先
        A->B->Y(2.0) 路径长度为2
        A->C->Y(1.0) 路径长度为2
        选Y(2.0)
        
八、本地仓库
    如果要自定义本地仓库目录地址,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址:
    <settings>
        <localRepository>D:\java\repository\</localRepository>
    </settings>

九、远程仓库配置
    POM中的repository 配置包括releases(发布)和snaphots(快照)。
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
        <checksumPolicy>ignore</checksumPolicy>
    </snapshots>
    
    updatePolicy 从远程仓库检查更新的频率,默认值daily,表示Maven每天检查一次。其值包括:never-从不检查更新;alawys-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)
    checksumPolicy Maven验证校验和文件。warn\fail\ignore
    1.远程仓库认证
        1>POM文件、settings.xml
        2>POM中的repository id 与 settings.xml文件中的server id 保持一致
    2.部署至远程仓库
        <distributionManagement>
            <repository>
                <id></id>
                <name></name>
                <url></url>
            </repository>
            <snapshotRepository>
                <id></id>
                <name></name>
                <url></url>
            </snapshotRepository>
        </distributionManagement>

十、生命周期
    1.Maven拥有三套项目独立的生命周期,分别为clean、default和site。
        clean 生命周期的目的是清理项目
        default 生命周期的目的是构建项目
        site 生命周期的目的是建立项目站点
        
        1>clean 生命周期的目的是清理项目,它包含三个阶段
            pre-clean:执行一些清理前需要完成的工作
            clean:清理上一次构建生成的文件
            post-clean:执行一些清理后需要完成的工作。
        2>default 生命周期
            validate
            initialize
            generate-sources
            process-sources 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
            generate-resources
            process-resources
            compile 编译项目的主源码。一般来说,是编译src/main/java目录下的java文件至项目输出的主classpath目录中。
            process-classes
            generate-test-srouces
            process-test-sources 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。
            generate-test-resources
            process-test-resource
            test-compile 编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中。
            process-test-classes
            test 使用单元测试框架进行测试,测试代码不会被打包或部署。
            prepare-package
            package 接受编译好的代码,打包成可发布的格式,如JAR
            pre-integration-test
            integration-test
            post-integration-test
            verify
            install 将包安装到Maven本地仓库,供本地其他Maven项目使用
            deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
            
            http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html         3>site 生命周期
            pre-site 执行一些在生成项目站点之前需要完成的工作。
            site 生成项目站点问文档
            post-site 执行一些在生成项目站点之后需要完成的工作
            site-deploy 将生成的项目站点发布到服务器上
            
十一、聚合
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.juvenxu.mvnbook.account</groupId>
      <artifactId>account-aggregator</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <!-- packaging 必须为pom,否则就无法构建 -->
      <packaging>pom</packaging> 
      <name>account-persist1</name>
      
      <!--元素 modules 是实现聚合最核心的配置,每个module的值都是一个当前POM的相对目录-->
      <modules>
          <module>account-email</module>
          <module>account-persist</module>
      </modules>
    </project>
    
    1.聚合模块的目录结构分为:父子目录结构和平行目录结构。
    2.约定由于配置
    任何一个Maven项目都隐式地继承自超级POM。对于Maven3,超级POM在文件$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0xml路径下。
    3.裁剪反应堆
    一般来说,用户会选择构建整个项目或者选择构建单个模块。
    Maven 提供很多的命令行选项支持裁剪反应堆,输入mvn -h 可以看到这些选项:
    1>-am, --also-make 同时构建所列模块的依赖模块
    2>-amd, -also-make-dependents 同时构建依赖于所列模块的模块
    3>-pl, --projects <arg> 构建制定的模块,模块间用逗号分隔
    4>-rf, -resume-from <arg> 从指定的模块回复反应堆