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. 数据库(学习整理)----7--Oracle导入导出数据库文件

    Oracle导入本地数据库操作手册 1.旧数据库忘记了密码,首先进入cmd:1)输入:sqlplus/nolog2)输入:connect/as sysdba3)输入:alter user sys id ...

  2. Go 的垃圾回收机制在实践中有哪些需要注意的地方(转)

    在网上看到一篇非常好的文章http://www.zhihu.com/question/21615032,转载如下: go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁 ...

  3. C# 接口(2)

    接口的实现方式. 接口的实现分两种: 1 显示实现接口 2 实现接口. 我们前面所得的接口的实现均为实现接口.也就是第二种方式.那么我们来来看第第一种实现方式: interface IHuman { ...

  4. npm更换为镜像

    背景:npm在安装的过程中需用从国外的网站获取代码,速度非常慢,因此更换为淘宝镜像,提升速度. 1.永久起作用: npm config set registry https://registry.ta ...

  5. React基础篇 (3)-- 生命周期

    生命周期是react中的重要部分,理解它有助于我们更合理的书写逻辑. 组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移 ...

  6. innerText、innerHTML

    innerTest修改的是标签的文本内容,如果修改的字符串具有标签的格式,不会把标签展示到页面中 innerHtml打印标签中所有子标签 以字符串的形式,如果修改的字符串有标签的格式,则直接展示到页面 ...

  7. 【ARC069F】Flags 2-sat+线段树优化建图+二分

    Description ​ 数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input ​ 第一行一个整数 N. ​ 接下来 N 行每行两个整数 xi, ...

  8. 【bzoj3930】选数 容斥原理+暴力

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  9. query flot 直方图上显示对应的y值

    方法1:使用在图上加 相对定位的 div 提示对应的直方图数量. 具体实现:获取直方图上所有的点,得到y值和对应的坐标位置,插入相对div 主要js代码:plot 为对应的图对象 //初始化柱状图数据 ...

  10. js 获取滚动条事件

    function getScroll() { return { left: window.pageXOffset || document.documentElement.scrollLeft || d ...