Maven 基本使用及依赖管理。

Posted 小黎的培培笔录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven 基本使用及依赖管理。相关的知识,希望对你有一定的参考价值。

目录

一、Maven 基本介绍

 1、主要功能

 2、标准化的项目结构

 3、基本介绍

 4、仓库 

二、Maven 安装配置

1、下载安装

2、配置环境变量

3、Maven 基本使用

三、IDEA中使用Maven

1、IDEA中配置Maven

2、Maven坐标

3、创建及导入项目

4、配置 Maven-Helper 插件

 四、依赖管理

1、依赖配置

2、使用坐标导包

3、依赖范围

 五、生命周期

         1、Maven 生命周期

2、插件


一、Maven 基本介绍

 1、主要功能

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
  • 提供了一套依赖管理机制

2、标准化的项目结构:

        项目结构我们都知道,每一个开发工具(IDE )都有自己不同的项目结构,它们互相之间不通用。我再 eclipse 中创建的目录,无法在idea 中进行使用,这就造成了很大的不方便, Maven 提供了一套标准化的项目结构,所有的 IDE 使用 Maven 构建的项目完全一样,所以 IDE 创建的 Maven 项目可以通用。 Maven构建的项目结构: 

标准化构建流程:

        我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

依赖管理: 

        依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件)。如之前我们项目中需要使用JDBC和Druid的话,就需要去网上下载对应的依赖包(当前之前是老师已经下载好提供给大家了),复制到项目中,还要将jar包加入工作环境这一系列的操作。

        而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。如下图右边所示就是mysql驱动包的坐标,在项目中只需要写这段配置,其他都不需要我们担心,Maven都帮我们进行操作了。 

 3、基本介绍

▶ 简介

        Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

▶ Maven 模型

        紫色框框起来的部分,他就是用来完成 `标准化构建流程` 。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。 

        紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标 。

▶ Maven项目

        依赖管理模型则是使用坐标来描述当前项目依赖哪儿些第三方jar包,如下图所示:

4、仓库 

▶ 仓库的分类

   用于储存各种资源,包含各种jar包 

    ▷ 本地仓库:自己计算机上的存储资源的一个仓库,连接远程仓库获取资源。

    ▷ 中央仓库:由Maven团队维护的全球唯一的仓库

         ● 地址: https://repo1.maven.org/maven2/

    ▷ 远程仓库(私服):一般由公司团队搭建的私有仓库,从中央仓库获取资源

        ● 私服的作用:

          保存具有版权的资源,包含购买或自主研发的 jar,中央仓库中的jar都是开源的,不能存储具有版权的资源。私服只在一定范围内共享资源,仅对内部开放,不对外共享。

▶ 配置仓库

 ▷ 本地仓库

  ● maven启动后,默认资源下载到本地仓库,默认位置:

<localRepository>$user.home/.m2/repository</localRepository>

  ● 自定义位置:

<localRepository>D:\\maven\\repository</localRepository>

 ▷ 远程仓库

  ● 默认连接远程仓库的位置

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

 ▷ 镜像仓库

  ● 配置阿里云镜像仓库

<mirrors>
    <!-- 配置具体的仓库的下载镜像-->
    <mirror>
        <!-- 此镜像的唯一标识符,用来区分不同的mirror元素-->
        <id>nexus-aliyun</id>
        <!-- 对哪种仓库进行镜像,简单来说就是替代哪个仓库-->
        <mirrorOf>central</mirrorOf>
        <!-- 镜像名称-->
        <name>Nexus aliyun</name>
        <!-- 镜像URL -->
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

▶ 全局setting 与 用户setting 的区别

 ● 全局setting 定义了当前计算器中Maven 的公共配置

 ● 用户setting 定义了当前用户的配置

▶ 访问顺序

  当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

        * 如果有,则在项目直接引用;

        * 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

  如果还可以搭建远程仓库,将来jar包的查找顺序则变为:

        * 本地仓库 --> 远程仓库--> 中央仓库 


二、Maven 安装配置

1、下载安装

        下载压缩包,然后解压 (如:apache-maven-3.6.1.rar) 既安装完成,建议解压缩到没有中文、特殊字符的路径下。

解压缩后的目录结构如下:

  ▷ bin目录 : 存放的是可执行命令。mvn 命令重点关注。
  ▷ conf目录 :存放Maven的配置文件。`settings.xml` 配置文件后期需要修改。
  ▷ lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。

2、配置环境变量

▷  `此电脑` 右键  -->  属性 -->  `高级系统设置`  -->  `高级`  -->  `环境变量`

▷ 在 `Path` 中进行配置:

▷ 打开命令提示符进行验证,出现如图所示表示安装成功

▷ 配置本地仓库

   修改 conf/settings.xml 中的 <localRepository> 为一个指定目录作为本地仓库,用来存储jar包。 

▷ 配置阿里云私服

   中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。修改 conf/settings.xml 中的 <mirrors>标签,为其添加如下子标签:

<mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>          
  </mirror>

3、Maven 基本使用

▶ 常用命令

  • compile :编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

▶ 项目结构

  Maven构建的项目,项目结构如下:

 而我们要使用上面命令需要在磁盘上进入到这个项目的 `pom.xml` 目录下,打开命令提示符(按住shift 再点击鼠标右键才能打开下列的命令提示符 Windows PowerShell)

▶ compile :编译

  命令行执行 mvn compile 可以看到:

    ▷ 从阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
    ▷ 在项目下会生成一个 `target` 目录

  同时在项目下会出现一个 `target` 目录,编译后的字节码文件就放在该目录下:

 

▶ clean:清理

  执行 mvn clean 命令可以看到

    ▷ 从阿里云下载清理需要的插件jar包
    ▷ 删除项目下的 `target` 目录

▶ test:测试

  mvn test 该命令会执行所有的测试代码。执行上述命令效果如下

▶ package:打包

  执行 mvn package 命令可以看到:

    ▷ 从阿里云下载打包需要的插件jar包
    ▷ 在项目的 `terget` 目录下有一个jar包(将当前项目打成的jar包)

▶ install:安装

   mvn install 该命令会将当前项目打成jar包,并安装到本地仓库。执行完上述命令后到本地仓库查看结果如下:

▶ maven项目 和 web项目 结构区分


三、IDEA中使用Maven

1、IDEA中配置Maven

设置 IDEA 使用本地安装的 Maven,并修改配置文件路径 

 2、Maven坐标

▶ 坐标?

        Maven 中的坐标是资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖

▶ Maven 坐标主要组成

  groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  version:定义当前项目版本号

  packaging : 定义该项目的打包方式

▶ 注意

   上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

▶ 插件

 Tomcat7 运行插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
            <port>80</port>
            <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

3、创建及导入项目

▶ 创建项目

 填写模块名称,坐标信息,点击finish,创建完成

创建好的项目目录结构如下:

▶ 导入项目

选择右侧Maven面板,点击 + 号

 

选中对应项目的pom.xml文件,双击即可

如果没有Maven面板,选择

  View --> Appearance --> Tool Window Bars

可以通过下图所示进行命令的操作:

  

4、配置 Maven-Helper 插件

 ▷ 选择 IDEA中 File --> Settings

 ▷ 选择 Plugins

 ▷ 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

 ▷ 重启 IDEA

    安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:


四、依赖管理

1、依赖配置

▶ 依赖配置

 ● 依赖指当前项目运行所需要的 jar 包, 一个项目可以设置多个依赖

 ● 格式:

<!-- 设置当前项目所依赖的所有 jar-->
<dependencies>
    <!-- 设置具体依赖-->
    <dependency>
        <!-- 设置依赖所属群组id-->
        <groupId>junit</groupId>
        <!-- 依赖所属项目id-->
        <artifactId>junit</artifactId>
        <!-- 依赖版本号-->
        <version>4.12</version>
    </dependency>
</dependencies>

▶ 依赖传递

 ● 依赖具有传递性:

   ○ 直接依赖:在当前项目中通过依赖配置建立的依赖关系

   ○ 间接依赖: 被资源的 资源如果依赖其他资源,当前项目间接依赖其他资源

▶ 依赖传递冲突

 ● 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

 ● 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

 ● 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

▶ 可选依赖

 可选依赖指对外隐藏当前所依赖的资源--不透明

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <optional>true</optional>
</dependency>

▶ 排除依赖

 排除依赖指主动排除依赖资源,被排除 的资源无需指定版本--不需要

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2、使用坐标导包

        在项目的 pom.xml 中编写 <dependencies> 标签,在 <dependencies> 标签中 使用 <dependency> 引入坐标,定义坐标的 groupId,artifactId,version

点击刷新按钮,使坐标生效

注意:
  ▷ 具体的坐标我们可以到网站进行搜索:https://mvnrepository.com/

▶ 快捷方式导入jar包的坐标

在 pom.xml 中 按 alt + insert,选择 Dependency

在弹出的面板中搜索对应坐标,然后双击选中对应坐标,点击刷新按钮,使坐标生效

▶ 自动导入设置

 选择 IDEA中 File --> Settings

在弹出的面板中找到 Build Tools

选择 Any changes,点击 ok 即可生效

3、依赖范围

        通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。如下图所示给 `junit` 依赖通过 `scope` 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

 那么 `scope` 都可以有哪些取值呢?

 作用范围:

        ● 主程序范围有效 (main 文件夹范围内)

        ● 测试程序范围有效 (test 文件夹范围内)

        ● 是否参与打包 (package 指令范围内)

 ▷ compile :作用于编译环境、测试环境、运行环境。
 ▷ test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值。
 ▷ provided :作用于编译环境、测试环境。我们后面会学习 `servlet-api` ,在使用它时,必须将 `scope` 设置为该值,不然运行时就会报错。
 ▷ runtime  : 作用于测试环境、运行环境。jdbc驱动一般将 `scope` 设置为该值,当然不设置也没有任何问题 。

 ▷ 注意:
    如果引入坐标不指定 `scope` 标签时,默认就是 compile  值。以后大部分jar包都是使用默认值。

▶ 依赖范围传递性

 带有依赖范围的资源进行传递,作用范围受到影响。

五、生命周期

 1、Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件。Maven 对项目构建的生命周期划分为3套:

   ▷ clean :清理工作。
   ▷ default :核心工作,例如编译,测试,打包,安装等。
   ▷ site : 产生报告,发布站点等。这套声明周期一般不会使用。

同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:

   当我们执行 `install`(安装)命令时,它会先执行 `compile`命令,再执行 `test ` 命令,再执行 `package` 命令,最后执行 `install` 命令。

   当我们执行 `package` (打包)命令时,它会先执行 `compile` 命令,再执行 `test` 命令,最后执行 `package` 命令。

 默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:

▶ clean 生命周期

      ● pre-clean :执行一些需要在clean 之前完成的工作

      ● clean :移除所有上一次构建生成的文件

      ● post : 执行一些需要在clean 之后立刻完成的工作

▶ site 构建生命周期

      ● pre-site : 执行一些需要在生成站点文档之前完成的工作

      ● site :生成项目的站点文档

      ● post-site :执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

      ● site-deploy :将生成的站点文档部署到特定的服务器上

▶ default 构建生命周期

2、插件

▶ 插件

  ● 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能

  ● 默认maven在各个生命周期上绑定有预设的功能

  ● 通过插件可以自定义其他功能

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

maven基本基础知识及命令学习-1

Maven概述:Maven是很有效的项目管理工具,maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目构建、报告和文档的软件项目管理工具。统一管理环境,架包等。

 

一 maven下载及环境配置

maven 依赖java的运行环境   在使用maven之前请下载安装JDK并配置其环境。

 maven下载 : http://maven.apache.org/download.cgi

下载后解压到盘(D)的 根目录

配置 : 

1.在 环境变量 新建MAVEN_HOME

变量名:MAVEN_HOME

变量值:D:\\apache-maven-3.5.0

 技术分享

 

2.在PATH中加入maven的  bin 目录

%MAVEN_HOME%\\bin

 技术分享

 

3.检查是否配置成功

 cmd   输入   mvn -v

技术分享

 

二 Maven核心知识:

1.Maven 项目目录结构:

src

-main

-java

-package

-test

-java

-package

resources

pox.xml

 

2.常用的项目构建路径

mvn            -v  查看maven版本

compile  编译

test 测试

package 打包项目

 

clean 删除target文件和字节码文件

install 把本项目的jar包安装到本地仓库中\\

3.自动创建目录骨架

两种方式:

1>使用 mvn archetype:generate 按照提示进行选择创建

2>使用 mvn archetype:generate -DgroupId=组织名,一般是公司网站的反写+项目名

-DartifactId=项目名-模块名

-Dversion=项目的版本号

-Dpackage=代码所存在的包名

4.maven中的坐标和仓库

坐标:构建,也是我们在pom.xml 文件中配置的信息(坐标)

仓库:

本地仓库:也就是本地conf/settings.xml指定配置的仓库所在位置

远程仓库:maven的全球仓库maven-model-builder-3.3.9.jar 里       pom.xml:https://repo.maven.apache.org/maven2

镜像仓库:所谓镜像就是a和b提供了一样的功能

设置镜像仓库在conf/settings.xml 里

<mirrors>

<mirror>

      <id>maven.net.cn</id>

      <mirrorOf>central</mirrorOf> 也可以是 * 匹配所有的仓库

      <name>central mirror in china</name>

      <url>http://maven.net.cn/centent/groups/public</url>

 </mirror>

<mirrors>

如果使用镜像仓库本地的仓库将不能使用

 

更改本地仓库的位置:settings.xml  <localRepository>E:\\mavendevelopment\\m2\\repository</localRepository>

 

5.maven的生命周期和插件

一个完整的项目构建过程包括:

清理, 编译, 测试, 打包, 集成测试, 验证, 部署

maven定义了三套相互独立的生命周期:

clean: 清理项目,default: 构建项目,site: 生成项目站点

clean:清理项目

pre-clean:执行清理前的工作

clean:清理上一次构建生成的所有文件

post-clean:执行清理后的工作

default:构建项目主要有:

compile

test

package

install

site:生成项目站点

pre-site: 生成站点前要完成的工作

site: 生成项目的站点文档

post-site: 生成项目站点后要完成的工作

site-deploy:发布生成的站点到服务器上

插件的使用:

如:source插件

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

<version>2.4</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>jar-no-fork</goal>

</goals>

</execution>

</executions>

 

</plugin>

</plugins>

</build>

 6.pom.xml 解析 元素介绍:

搜索maven pom.xml 元素解析

<!--   指定当前pom的版本  -->

 <modelVersion>4.0.0</modelVersion>

<groupId>反写的公司网站+项目名</groupId>

<artifactId>项目名+木块名</artifactId>

snapshot //快照

alpha //内部版本

beta //公测版本

Release //稳定版本

<version>0.0.1SNAPSHOT</version>

打包是第后缀名,默认为jar,   war  zip  pom

<packaging></packaging>

 

<name>项目描述名</name>

<url>项目地址</url>

<description>项目描述</description>

<developers></developers>

<licenses></licenses>

<organization></organization>

 

依赖:  依赖传递、  依赖范围、   依赖冲突

依赖冲突:   1短路优先  A->B->C->X(jar)

A->D->X(jar)优先

2 先声明先优先

<dependencies>

 

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.10</version>

   <type></type>

 

<scope>test</scope>依赖范围  编译 测试 运行

 

 

<optional></optional> 设置依赖是否可选

 

<exclusions>排除依赖传递列表

<exclusion>

<groupId></groupId>

<artifactId></artifactId>

</exclusion>

</exclusions>

</dependency>

</dependencies>

 

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

<version>2.4</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>jar-no-fork</goal>

</goals>

</execution>

</executions>

 

</plugin>

</plugins>

</build>

 

<parent></parent>继承 

 

<modules><module></module></modules>批量干什么  聚合

 

 

tomcat7 配置:

 <build>

    <finalName>MyMavenPro</finalName>

    <plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.1</version>

<configuration>

<port>8081</port>

<path>/MyMavenPro</path>

<uriEncoding>utf-8</uriEncoding>

<finalName>MyMavenPro</finalName>

<server>tomcat7</server>

</configuration>

</plugin>

     </plugins>

  </build>

运行时用命令:tomcat7:run

以上是关于Maven 基本使用及依赖管理。的主要内容,如果未能解决你的问题,请参考以下文章

项目构建工具之maven01

Maven:Maven_02:依赖管理与冲突解决及项目继承聚合

maven基础和基本使用

Maven

部署maven及Nexus私服

Maven入门指南 Maven 快速入门及简单使用