1、  

  1.1  何为构建

        编译、测试、运行、打包、部署等工作;

        Maven就是用软件的办法让这一系列工作自动化,只需要一条简单的命令,所有繁琐的工作就会自动完成;

        Maven最大的消除了构建的重复,抽象了生命周期,标准化了构建过程

  1.2  Maven不仅仅是构建工具、还是依赖管理工具、项目信息管理工具

        Maven为全世界的Java开发者提供了一个免费的中央仓库;

  1.3  Maven的安装与配置

      1.1  环境变量中新建变量:maven_home   Maven的安装目录

      1.2  环境变量配置path:

           当我们在cmd中输入命令时,

              window首先会在当前目录寻找可执行的文件或脚本;

              如果没有找到,Windows接着遍历环境变量path中定义的路径;

              由于将%maven_home%\bin添加到了path中,而%maven_home%实际是引用了前面定义的另一个变量,其值是Maven的安装目录;

              Windows会在执行命令时搜索目录maven\bin 下的执行脚本;

      1.3  安装目录分析 

            bin:

              包含了mvn运行的脚本

            boot:

              只包含了一个文件***.jar,是一个类加载器框架,相对于默认的java类加载框架,提供了更丰富的语法,Maven使用该框架加载自己的类库;

            conf:

              其中的settings.xml文件可以全局的定制Maven的行为;

              maven目录/conf/settings.xml:全局范围;

              ~/.m2/settings.xml:用户范围;

            lib:

              该目录包含了Maven运行时所有用到的java类库;

2、Maven基本使用 

    1.1  pom.xml

          Maven项目的核心是pom.xml;

          定义了项目的基本信息,用于描述项目如何构建、声明依赖。。。;

          pom.xml中没有任何的java代码,体现了Maven的一大有点:让项目对象模型最大程度与实际代码相独立(解耦);

    1.2  项目主代码(src/main/java)

          会被打包到最终的构件(jar)中;

         项目测试代码(src/test/java)

          只在运行测试时用到,不会被打包;  

         mvn clean:

             告诉Maven清理删除输出目录target/;

              默认情况下,Maven构建的所有输出都在target、目录中;

         mvn compile:        

             告诉maven编译src/main/java下的代码;

              默认情况下,maven将主代码编译至target/classes目录中;

         mvn package:

              将项目主代码打包成一个jar或者别的包的文件,该文件位于target/目录下;

         mvn install:

              将打包好的项目安装到本地仓库后,其他的Maven项目才能使用打包的项目;

3、Maven的坐标

    1.1  世界上的任何一个构件都可以使用Maven坐标来唯一标识

    1.2  groupId:  Maven项目的名称

        artifactId:  maven项目模块

        version:  maven项目的版本

        packaging:  maven 项目的打包方式

    1.3      <dependency>

          <groupId..

          <artifactId..

          <version..

          <type></type>  依赖的类型,默认为jar,对应于项目定义的packaging

          <scope></scope>  依赖的范围:compile,test,provided,runtime,system,import

          <optional></optional>  标记依赖是否可选

          <exclusions></exclusions>  排除传递性依赖

        </dependency>

4、Maven仓库

    1.1  本地仓库、远程仓库(私服[局域网内的]、中央仓库[国外的])

    1.2  镜像

          如果仓库A可以提供仓库B存储的所有内容,那么可以认为A是B的一个镜像;

5、Maven的聚合

    1.1  把项目的各个模块聚合在一起构建

        <modules></modules>  实现聚合的最核心的配置,一般位于项目目录的最顶层

6、Maven的继承

    1.1  帮助抽取各模块相同的依赖和插件等配置

        <parent>    父模块

          <groupId..

          <artifactId...

          <version...

          <relativePath></relativePath>  当项目构建时,Maven首先根据relativePath寻找父POM,如果找到父POM,就不需要去本地仓库找;

            如果找不到,再去本地仓库查找;

         <parent> 

  聚合和继承的关系:

      聚合POM、继承关系的父POM的packaging都必须是POM

7、Maven的依赖管理 

    1.1  <dependencies></dependencies>  

           该元素说明  依赖会被继承

    1.2  <dependencyManagement></dependencyManagement>  

           该元素  既能让子模块继承到父模块的依赖配置,又可保证子模块依赖使用的灵活性;

           在dependencyManagement元素下声明的依赖不会引入实际的依赖,但能够约束dependencies元素下的依赖使用

8、Maven的插件管理

    1.1  <pluginManagement></pluginManagement>  ???暂搁置

9、Maven的灵活构建

    一个优秀的构建系统必须足够灵活,让项目在不同的环境下都能成功构建:

       如:开发、测试、生产环境下数据库的不同配置;

    maven为了支持构建的灵活性,内置了三大特性:

      1、Maven属性:

        1.1  内置属性:

              ${basedir}  项目根目录

              ${version}  项目版本

        1.2  POM属性:

              用户可以使用该类(project)属性引用pom文件中对应的元素的值;

                

        1.3  自定义属性:

              

        1.4  Settings属性:

              与pom属性类似;

              使用以settings.开头的属性  将会 引用 settings.xml文件中的元素的值;eg:${settings.localRepository}

        1.5  java系统属性:

              所有的java系统属性都可以使用Maven属性引用:

                eg:${user.home}指向用户目录

        1.6  环境变量的属性:

              所有的环境变量都可以使用以env.开头的Maven属性引用:

                eg:${env.JAVA_HOME}指向java的环境变量;

        1.7  Maven属性只有在pom.xml中才会被解析,放到资源文件中是不会自动解析的,因此需要让Maven解析资源文件中的Maven属性:

              资源文件的处理是由maven-resources-plugin做的事情

                默认的行为:将项目主资源源文件复制到主代码编译输出的目录中,将测试资源文件复制到财务室代码编译输出目录中

              【如何让Maven解析资源文件中的Maven属性???(开启资源过滤)】

                

                 使用命令行激活profile:mvn clean install -Pdev  -P:在命令行激活一个profile

      2、profile

         1.1   profile的激活方式:

                  a,  命令行激活:多个profile之间以逗号分隔

                    mvn clean install -Pdev

                  b,  settings.xml显式激活:

                    

                  c,  系统属性激活:

                    

                  d,  操作系统属性激活:

                     

                     

                  e,  文件存在与否激活:

                     

                  f,  默认激活:

                    

         1.2  profile的种类:

               pom.xml  只对当前项目有效

               用户settings.xml  对该用户所有的Maven项目有效

               全局settings.xml  conf目录下的,对本机上所有的Maven项目均有效

     3、Web资源过滤

         在web项目中,资源文件位于src/main/resources/目录下;

          web项目中还有一种静态资源,eg:css,js...

              

                                       

      

Maven系统学习的更多相关文章

  1. 天天都在用Git,那么你系统学习过吗?(一)学习过程

    你系统学习Git了吗? 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职的时候,会让他先用一周的时间去学习 ...

  2. maven基础学习-为什么要用maven,帮助解决了什么问题,怎么解决的,希望以后学习每个知识点都可以这样问下自己

    maven基础学习 第1章 Maven介绍 1.1 什么是Maven 1.1.1 什么是Maven Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Mave ...

  3. GIT学习——天天都在用Git,那么你系统学习过吗?(学习过程)

    你系统学习Git了吗? 学习圣思园张龙老师的Git课程. 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职 ...

  4. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  5. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

    前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...

  6. MES系统学习

    MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...

  7. 001 今天开始系统学习C#

    2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...

  8. Maven之 学习资料

    整理maven的学习资料,长期更新. 一.视频 1.孔浩老师的  maven视频教程 二.博客 1.黄勇:     maven那些事儿 使用 OSC Maven 仓库 三.书籍 1.<Maven ...

  9. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

随机推荐

  1. web开发四个作用域

    web开发一共有四个作用域,范围从高到低分为appliaction作用域(全局作用域),session作用域,request作用域和page作用域.${base}是el表达式语法,它会自动先从page ...

  2. 门面(Facade)模式

    门面(Facade)模式  也叫 外观模式. 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用 /* * 门面(Facade)角色:客户端可以 ...

  3. .net Reflection(反射)- 一

    Reflection 反射需要引用 using System.Reflection; 命名空间.  通过 Assembly 类的 Load( ); 加载指定的 程序集 Assembly 是不能被实例化 ...

  4. C# Socket 发送&接收&返回

    因为工作比较忙,好久没有写过博客了,最近因项目需求,需要用到Socket来进行通信,简单写了几个例子,记录一下,代码很简单,无非就是接收与发送,以及接收到数据后返回一个自定义信息,也可以说是发送. 先 ...

  5. 使用VS Code编写Markdown文件

    VS Code默认支持Markdown文件文件格式,这里介绍两个比较实用的功能,后续有新发现,可以持续更新. 实时预览 顾名思义,实时编辑,实时预览解析效果. 在VS Code扩展中搜索"M ...

  6. C#导出Excel-利用特性自定义数据

    网上C#导出Excel的方法有很多.但用来用去感觉不够自动化.于是花了点时间,利用特性做了个比较通用的导出方法.只需要根据实体类,自动导出想要的数据  1.在NuGet上安装Aspose.Cells或 ...

  7. React + Dva + Antd + Umi 概况

    Dva 由阿里架构师 sorrycc 带领 team 完成的一套前端框架,在作者的 github 里是这么描述它的:"dva 是 react 和 redux 的最佳实践". Ant ...

  8. PHP选项和运行

    PHP运行模式 五大运行模式 1.cgi 通用网关接口 2.fast-cgi cgi升级 3.cli (Command Line Interface) 4.isapi 微软提供的面向Internet服 ...

  9. Win7下C/C++跨平台开发工具IDE的安装之Eclipse-CDT

    2. win7下安装Eclipse-CDT运行C/C++程序: 下载Eclipse-CDT 64位:http://www.eclipse.org/downloads/packages/release/ ...

  10. Java网络编程客户端和服务器通信

    在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...