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. Windows7下使用sphinx生成开源文档(原)

    作者这里以osgearth文档为例,感觉这种生成文档的方式比较好,生成的html文档是支持搜索的,感谢开源工作者的奉献.赞一个 1. 下载并安装python for windows:https://w ...

  2. Java反射学习:深入学习Java反射机制

    一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...

  3. win10 + Lubuntu 双系统安装

    win10 + Lubuntu 双系统安装 最近重装了系统,索性直接安装win10 + Lubuntu 双系统,便于在物理机下进行 Linux开发. 这里我选择的 Linux 发行版是 Lubuntu ...

  4. 详细grep、sed、awk

    [root@VM_0_7_centos tmp]# cat 1.txt 1 2 3 4 5 6 [root@VM_0_7_centos tmp]# cat 2.txt 4 5 6 7 8 [root@ ...

  5. NetworkX初相识

    听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...

  6. 选择排序 思想 JAVA实现

    已知一个数组 9.29.95.47.79.37.18.56.96.22 使用选择排序是数组有序 选择排序同样是一个运行时间为O(N²)的排序算法. 算法思想:(以从小到大为例) 9.29.95.47. ...

  7. [jvm] JVM体系结构

    一.jvm 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存(非JVM区域) 二.深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全 ...

  8. 190320运算符&数据类型

    一.运算符 1.算术运算符 + 加 - 减 * 乘 / 除 ** 平方 // 整除 % 取余 2.比较运算符 == 等于 > 大于 < 小于 <= 小于等于 >= 大于等于 ! ...

  9. SDUT OJ 数据结构实验之二叉树一:树的同构

    数据结构实验之二叉树一:树的同构 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  10. 导出table为Excel

    1.HTML <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=" ...