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. http请求和返回的head字段

    一,http请求分请求首部字段,通用首部字段,实体首部字段.http响应包含响应首部字段,通用首部字段,实体首部字段. 二,http1.1定义了47种首部字段.1,通用首部字段:cache-contr ...

  2. 很好的QSqlDatabase问题说明,关于连接错误(转)

    QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connect ...

  3. mybatis使用count返回int的方法

    <select id="countByExample" resultType="java.lang.Integer" > select count( ...

  4. MYSQL常用日期操作

    mysql查询今天.昨天.7天.近30天.本月.上一月 数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT ...

  5. BZOJ 4034[HAOI2015]树上操作(树链剖分)

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点 ...

  6. 【C#】 ref out

    ref 通常我们向方法中传递的是值,方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不会受到影响. 这种情况是通常的,当然还有另外一种情况,我们向方法传递 ...

  7. 21天学通C++学习笔记(二):C++程序的组成部分

    1. 预处理器编译指令 预处理器是一个在编译前运行的工具. 预处理器编译指令是向预处理器发出的命令,总是以磅字符#大头. #include让预处理器获取指定文件并将它们放在编译指令所处的位置.#inc ...

  8. 模拟Springboot二:内置tomcat

    既然要将tomcat内置到项目中,并且能够成功的启动项目就要知道 tomcat  做了哪些事情 ,那么就必须先搞明白 一个 普通的web项目是如何被我们本地配置的tomcat启动并运行的 (1). 先 ...

  9. 【leetcode 5040. 边框着色】解题报告

    方法一:dfs的非递归形式 using ll=long long; const ll MAXN=50LL; unordered_set<ll> vis,mark; vector<ve ...

  10. 如何用python批量翻译文本?

    首先,看一下百度翻译的官方api文档. http://api.fanyi.baidu.com/api/trans/product/apidoc # coding=utf-8 #authority:bi ...