java-zmj

一、简介

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

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

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标签括起来

 

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

 

分类:

技术点:

相关文章: