一、简介

maven:
  是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的,Maven是跨平台的项目管理工具。

  1.自动化构建和项目管理工具

      Ant→Make→Maven→Gradle

  2.Maven概述

    ①读音:妹文、麦文

    ②Maven作用一:自动化构建

    ③Maven作用二:依赖管理[多了重复、少了报错]

    ④Maven作用三:项目信息管理

  3.自动化构建

    ①构建[build]:将程序员编写的代码从源文件到服务器部署的整个过程。

        清理→编译→测试→报告→打包→部署→运行……

    ②自动化构建:将构建过程中的各个操作步骤交给构建工具自动完成。

  4.Maven的好处?

        节省空间

        就是对jar包的统一管理就是对jar包的统一管理,依赖管理

        一键构建,

        可跨平台

  5.Maven的用途 

      ①项目构建:项目构建指的是程序模块从清理、编译直到部署的整个过程。

      ②依赖管理:Maven能够提供自动的依赖管理,将所需要的JAR自动导入到工程中,根据既定的规则很好的解决JAR包之间的冲突。

      ③项目信息管理:Maven能够提供高质量的项目信息,包括依赖关系、测试报告、站点信息等详细内容,并自动生成静态页面,拷贝到服务器上就可以直接使用。

二、Maven的配置

    ①要求当前系统环境下配置了JAVA_HOME

      在CMD命令行中输入:echo %JAVA_HOME% 如果能出来JDK的安装目录,说明我们配置了JAVA环境

    ②将Maven的ZIP压缩包解压到一个非中文无空格目录下【maven.apache.org官方网站下载jar包】

      apache-maven-3.3.9-bin.zip

    ③.配置环境变量,用mvn -v查看是否正确配置了maven【要配置jdk, maven3.3.9这个版本所需的jdk版本必须要1.7以上】

M2_HOME:

    D:\DevSoft\apache-maven-3.3.9

path:
    %M2_HOME%\bin;

mvn -v查看maven版本

    ④.先了解一下maven的目录结构:
        projectname
          -src
            -main
              -java
                -package
              -resources【配置文件或者说资源文件】
            -test
              -java
                -package
              -resources
          pom.xml

    按照上面的maven的目录结构创建一个maven项目,参照word文档!

    ⑤当针对某个Maven工程执行诸如“编译”、“测试”、“打包”、“部署”等命令时,需要进入到pom.xml所在的目录下执行。

          mvn compile

三、maven的几个概念:

  1.坐标

    ①数学坐标:平面中使用横纵两个坐标系可以唯一的定位平面中的任何一个点。

      向量x:横坐标

      向量y:纵坐标

    ②使用三个向量在Maven仓库中唯一的定位一个Maven工程。

      向量groupid:公司或组织的名称+项目名称

      向量artifactId:模块名称

      向量version:模块版本

        <groupId>com.neuedu.maven</groupId>

        <artifactId>Hello</artifactId>

        <version>0.0.1-SNAPSHOT</version>

    ③如何根据坐标zhao到仓库中查找对应的Maven工程

      坐标

        <groupId>org.springframework</groupId>

        <artifactId>spring-core</artifactId>

        <version>4.0.0.RELEASE</version>

      仓库中的路径

          org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

    ④如何查找指定jar包的坐标:

      1.从maven仓库下载

        http://search.maven.org/

        http://mvnrepository.com/【建议使用这个】

四、仓库

  ①作用:保存Maven工程

  ②分类

    [1]本地仓库:为当前电脑上所有Maven工程服务【本地仓库的配置只需要修改settings.xml文件就可以】

    [2]远程仓库[私服]:为当前局域网中的所有Maven工程服务器,公司维护

    [3]中央仓库:为全世界所有的Maven工程服务

    [4]中央仓库的镜像:内容和中央仓库一样,架设在全世界各个大洲,让Maven用户可以就近获取需要的Maven资源,同时也能够减轻中央仓库的压力。

  ③jar包的查找过程

      首先在本地仓库中查找,如果找不到就到局域网中的私服中去找,还找不到就连接中央仓库或镜像。从中央仓库或镜像中找到后,如果局域网中架设了私服,就保存到私服上,

    下次同一局域网中的其他用户直接从私服上下载即可,不必连接中央仓库或镜像了。如果局域网中没有架设私服,则保存在本地仓库中。

  ④Maven工程分类

      [1]Maven用户自己开发的工程

      [2]Maven的插件

      [3]使用Maven构建得到的第三方jar包

  ⑤可以修改Maven默认的本地仓库路径,使其指向一个提前下载好的目录

    配置文件路径

      Maven解压目录/conf/settings.xml

    修改

      <localRepository>D:\Maven\Repository</localRepository>

五、生命周期

    clean 删除target目录

      compile 编译

      test 测试,先执行compile,再执行test

      package 打包(并将jar包放入到target的目录中),先执行compile,然后执行test,最后执行package

      install 安装jar包到本地仓库中

      mvn deploy

    site 生成一个站点,先执行compile,然后执行test,然后执行package,最后执行site

  ①Maven为了能够将构建过程自动化处理,定义了三个主要的生命周期。其中定义了相关的构建过程。

  ②三个生命周期

    [1]清理周期clean

    [2]站点周期site

    [3]默认周期default

  ③最重要的特点:每个生命周期中执行任何一个操作,都是从这个生命周期最初的位置开始执行,直到到达命令指定的位。

六、依赖管理

  1、使用坐标引用依赖的项目

      依赖声明主要包含如下元素:

          <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>

  2、依赖方式

      [1]在pom.xml配置文件中使用dependencies/dependency元素配置依赖信息

      [2]通过目标jar包的坐标找到被依赖的文件

  3、依赖范围

    在依赖声明中,scope标签指定的就是当前项目在什么情况下对目标项目有依赖。可选值包括:compile、test、provided、runtime等

      1.默认compile:当前所依赖的jar包是当前Maven工程中所有类都需要使用的,最终也需要参与打包。

      2.test:只是当前工程中的测试类需要,最终不参与打包。

      3.provided:当工程在服务器上运行起来后,可以由服务器提供,所以也只是在开发或测试时使用,部署到服务器上时就不需要。

  一个自己开发的Maven工程,需要执行“安装”命令,才能够被放入到仓库中。

  4、依赖复杂性
    [1]路径最短者优先
        MakeFriends --------> HelloFriends----------->Hello
                    |                              |
                   log4j.2.1.14          log4j.2.1.17

    [2]路径相同时,先声明者优先
        MakeFriends --------> HelloFriends ------>log4j.2.1.14
                    |
             -------------->OurFriends ------->log4j.2.1.12

  5、版本冲突的解决方案

    [1]调节原则:

        [1]路径最短者优先原则

        [2]路径相同时,先声明者优先原则

    [2]排除原则

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
<!--这里不需要指定版本号 -->
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>

    [3]版本锁定原则

<dependencyManagement>
<dependencies>
<dependency>
<!--jar包坐标 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>

    版本锁定之后,后面再使用到这个的 依赖的时候,就不要写版本号了!

    而且如果有多个相同的需要锁定的jar包的版本号一致的话,我们可以单独提取到properties标签中,

    在properties标签中,子标签自己定义,标签的值就是版本号,下面只需要在依赖的地方用${}引用就可以了!

七、继承

    ①目的一:将pom.xml文件中重复的信息统一提取到父工程中,简化pom.xml中的配置

    ②目的二:将各个子工程都需要依赖的jar包提取到父工程中统一管理

    ③注意:父工程打包的方式——pom,表示这是一个管理其他工程的工程

        < packaging>pom</ packaging>

    ④指定当前工程的父工程

      <parent >

          <groupId>com.atguigu.maven</groupId>

          <artifactId>Parent</artifactId>

          <version>0.0.1-SNAPSHOT</version>

        <!-- 如何通过当前工程的pom.xml文件找到父工程的pom.xml文件 -->

        <!-- 配置父工程的pom.xml文件相对于当前工程pom.xml文件的相对路径 -->

          <relativePath> ../Parent/pom.xml</relativePath >

      </parent >

    在tomcat运行一遍,用插件运行一遍

  解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    1.添加M2_HOME的环境变量

    2.Preference->Java->Installed JREs->Edit 选择一个jdk,

      添加 -Dmaven.multiModuleProjectDirectory=$M2_HOME

  继承练习:

①新建Maven项目Parent

②修改Parent/pom.xml的<packaging>jar</packaging>为<packaging>pom</packaging>,表明这不是一个普通的Java工程或Web工程,而是管理其他Maven工程的工程。

③删除子项目中的重复内容,提取依赖信息

④在子项目POM中,添加

<parent>

    <groupId>...</groupId>

<artifactId>...</artifactId>

<version>...</version>

<relativePath>从当前目录到父项目的pom.xml文件的相对路径</relativePath>

</parent>

注意:此时如果安装某个项目报错,则是因为Parent工程没有安装

⑤发现子项目中依赖的包和项目有问题

⑥将Parent项目中的dependencies标签,用dependencyManagement标签括起来

⑦在子项目中重新指定需要的依赖,删除范围和版本号

Maven的相关知识及使用的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  3. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  4. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  5. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  6. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  7. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  8. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

随机推荐

  1. css3加载spinner

    使用代码制作一个加载旋转器spinner 实现的原理是: 1.两个圆圈,其中一个圆圈是使用pseudo元素(:before)产生 2.由pseudo元素生成的圆通过负数的z-index而作用在下面 3 ...

  2. python-Django收集主机信息

    1.创建工程simplecmdb django-admin.py startproject simplecmdb 2.创建应用 cd simplecmdb python manage.py start ...

  3. L101

    It isn't where you came from. It's where you're going that counts.起点并不重要,重要的是,你要去往何方.Nothing is impo ...

  4. URAL1517Freedom of Choice(后缀数组)

    Background Before Albanian people could bear with the freedom of speech (this story is fully describ ...

  5. LOJ2305 「NOI2017」游戏

    「NOI2017」游戏 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行$n$场 ...

  6. bzoj 1355: Radio Transmission

    题目大意: 求字符串的最短循环覆盖字符串 题解: 经典结论题: kmp \(ans = n - next[n]\) #include <cstdio> #include <cstri ...

  7. CSS 关于文本 背景 边框整理

    文本与字体 1)阴影:text-shadow 格式:text-shadow:5px 5px 3px #FFFFFF分别对应 水平方向 垂直方向 模糊程度 颜色值 代码: <!DOCTYPE ht ...

  8. ES6学习之Symbol

    定义:一种新的原始数据类型,表示独一无二的值 const a = Symbol(); const b = Symbol("foo") //接收参数的Symbol,参数表示对Symb ...

  9. ES6学习之对象扩展

    简介表示法(直接写入变量和函数,作为对象的属性和方法) let x = "test" let obj={ x, //属性名为变量名,属性值为变量值 y(){console.log( ...

  10. CSS如何计算优先级?如何计算权重?

    (1) 优先级就近原则,同权重以最近者为准 载入样式以最后载入的样式为准: 同权重下:内联样式表(标签内部) > 嵌入样式表(当前文件) > 外部样式表(外部文件) !import > ...