• Maven的相关知识及使用


    一、简介

    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:DevSoftapache-maven-3.3.9

    path:
        %M2_HOME%in;

    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:MavenRepository</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、使用坐标引用依赖的项目

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

    1          <dependencies>
    2                <dependency>
    3                      <groupId>junit</groupId>
    4                      <artifactId>junit</artifactId>
    5                      <version>4.10</version>
    6                      <scope>test</scope>
    7                </dependency>
    8          </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标签括起来

     

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

  • 相关阅读:
    13.2 抽像类与体类(Abstract & Concrete Classes) 简单
    13.3 深度隔离的界面(Deeply Parted interface) 简单
    计算天数(C++)_学习 简单
    13.1.2 纯虚函数(Pure Virutal Functions) 简单
    C++ operator关键字(重载操作符) 简单
    二月一共多少天 简单
    重载运算符操作_学习 简单
    计算两个日期之间的天数(C++) 简单
    1.2 连接信号和响应函数 简单
    用Android手机做台式机无线网卡
  • 原文地址:https://www.cnblogs.com/java-zmj/p/7978809.html
Copyright © 2020-2023  润新知