Maven基础

介绍

  • Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。
    基于项目对象模型(缩写:POM)概念Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤
    Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理各种项目,例如
    C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立
    Apache 项目。
  • 参考菜鸟教程

作用

  • 能帮我们构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮我们部署项目,生成 Web 站点。

Maven的原理

  • Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成
    一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。
  • 传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。那么
    maven 工程是如何使得工程变得很少呢?
    在这里插入图片描述
  • 经分析:maven是通过pom.xml文件来添加所需的jar包坐标,从而在需要的时候通过pom.xml文件中的坐标到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从
  • 而找到这些 jar 包将其引进来。

注: 为了解决这个通过坐标来去仓库加载jar过程中速度慢的问题,maven 中也有索引的概念,通 过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar包基本跟放在本地的工程文件中再 读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我 们就可以认为可以快速找到 jar 包。

项目的构建

  • 项目往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
  • 构建:就是指项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个
    过程称为构建。
  • 一键构建:指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
  • Maven 规范化构建流程如下:
    在这里插入图片描述

Maven的使用

  • 下载

    • 到官网去下载:下载地址:官网
      在这里插入图片描述
  • 安装

    • 下载后将其解压到一个没有中文没有空格的路径下。

    • 目录结构介绍
      在这里插入图片描述

    • bin:存放了 maven 的命令,比如我们前面用到的mvn tomcat:run

    • boot:存放了一些 maven 本身的引导程序,如类加载器等

    • conf:存放了 maven 的一些配置文件,如 setting.xml 文件

    • lib:存放了 maven 本身运行所需的一些 jar 包

    • 至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

  • 环境的搭建

    • 注意:maven版本和jdk版本需要统一
    • 版本统一可以参考以下链接:http://maven.apache.org/docs/history.html
      在这里插入图片描述
    • 这里使用JDK 8
    • JDK环境搭建参考:https://blog.csdn.net/qq_43556844/article/details/114648462
    • maven环境搭建:注意这一步之前需要将java环境搭建好,使用JDK1.7 +版本
      配置MAVEN_HOME,变量值是maven的安装路径(即bin目录之前的一级目录)
      在这里插入图片描述
    • 测试:
      在这里插入图片描述
    • 使用mvn -v命令可以看到 maven 的版本为 3.8.3 及 java 版本为 1.8 即为安装成功。

Maven仓库

  • Maven 仓库的分类
    • maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven
      软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是本地文
      件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库
      理解为缓存,有了本地仓库就不用每次从远程仓库下载了
      在这里插入图片描述

    • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
      优先从本地仓库查找

    • 默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows 用户目录
      在这里插入图片描述

    • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
      远程仓库可以在互联网内也可以在局域网内。

    • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中
      央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包
      含了世界上大部分流行的开源项目构件。

    • Maven本地仓库的配置

      • 若自己的本地仓库中存放着大量需要的jar包,可以实现无网环境的开发。
    • 更换电脑进行开发的时候可以将之前的repository库放在新的电脑上(这样之前下载的jar都可以用)
      如我们将自己的repository放在D盘( D:\repository)目录下。

    • 这时我们需要在 MAVE_HOME/conf/settings.xml(即maven 的安装目录下)配置本地仓库位置
      在这里插入图片描述

    • 全局setting与用户setting

      • maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。
        在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project
        项目,它作为 maven 的全局配置。
      • 如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user.dir} /.m2/settings.xml 目录中,${user.dir} 指windows 中的用户目录
      • maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
        在这里插入图片描述

Maven工程的认识

在这里插入图片描述

  • src下文件的介绍
  • src/main/java —— 存放项目的.java 文件
  • src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
  • src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
  • src/test/resources —— 测试资源文件
  • target —— 项目输出位置,编译后的class 文件会输出到此目录
  • pom.xml——maven 项目核心配置文件
  • 注意:如果是普通的 java 项目,那么就没有webapp 目录。

Maven常用命令

  • 我们可以在cmd 中通过一系列的 maven 命令来对我们的 maven-helloworld 工程进行编译、测试、运
    行、打包、安装、部署。
  • compile
    • compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
      目录下。
    • cmd 进入命令状态,执行mvn compile,如下图提示成功:
      在这里插入图片描述
    • 查看 target 目录,class 文件已生成,编译完成
      在这里插入图片描述
  • test
  • test 是 maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
  • clean
    • clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
  • package
    • package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于web 工程打成war
      包。
  • install
    • install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
  • 从运行结果中,可以看出:
  • 当后面的命令执行时,前面的操作过程也都会自动执行,
  • Maven 指令的生命周期
    • maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,
    • 这三套生命周期分别是:
    • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
    • Site Lifecycle 生成项目报告,站点,发布站点。
  • maven 的概念模型
  • Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project
    Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段
    (phase)中插件(plugin)目标(goal)的逻辑。
    在这里插入图片描述
  • 项目对象模型 (Project Object Model)
    • 一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、
      插件目标等。
    • 依赖管理系统(Dependency Management System)
    • 通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
    • 一个项目生命周期(Project Lifecycle)
    • 使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些
    • 过程规范为一个生命周期,如下所示是生命周期的各各阶段:
      在这里插入图片描述

使用idea搭建Maven工程

  • 首先配置在idea中配置maven
    在这里插入图片描述

  • 新建一个工程->选择 idea提供好的 maven 的web 工程模板->点击 Next填写项目信息在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 点击完成后开始创建工程
    在这里插入图片描述

  • 可以看到最终的目录不完整,需要手动去补齐。

  • 创建新文件夹后,点击 OK 后,在新的文件夹 java 上右键Make Directory as Sources Root
    在这里插入图片描述

  • 测试运行

  • 新建一个ServletDemo的java类,可以看到会报错,因为需要导入servlet-api-xxx.jar包。
    在这里插入图片描述

  • 在maven中导入该jar包–>首先在pom.xml文件(idea有提示功能)
    在这里插入图片描述

  • 添加 jar 包的坐标时,还可以指定这个 jar 包将来的作用范围。

  • 每个 maven 工程都需要定义本工程的坐标,坐标是 maven 对 jar 包的身份定义,比如:入门程序的

  • 坐标定义如下:

  <!--项目名称,定义为组织名+项目名,类似包名-->
  <groupId>com.demo</groupId>
  <!-- 模块名称 -->
  <artifactId>Hello</artifactId>
  <!-- 当前项目版本号,snapshot 为快照版本即非正式版本,release为正式发布版本 -->
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <!--
    打包类型
    jar:执行 package 会打成 jar 包
    war:执行 package 会打成 war 包
    pom :用于 maven 工程的继承,通常父工程设置为 pom
  -->
  • 坐标来源

  • 添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下方
    式查询:

  • 从互联网 搜索
    http://search.maven.org/
    http://mvnrepository.com/

  • 依赖范围

    • A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包
      括:
      • compile:编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
      • provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。
      • runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
      • test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。
      • system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。
        在这里插入图片描述
  • 在 maven-web 工程中测试各 scop。

  • 测试总结:

    • 默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
    • servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
    • jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
    • junit ----- test (测试有效)
    • 依赖范围由强到弱的顺序是:compile>provided>runtime>test
  • 在项目中使用
    在这里插入图片描述

  • 设置 jdk 编译版本

  • 本教程使用 jdk1.8,需要设置编译版本为 1.8,这里需要使用 maven 的插件来设置:

  • 在 pom.xml 中加入:
    在这里插入图片描述

  • 编写servlet

  • 内容如下
    在这里插入图片描述

  • 编写jsp
    在这里插入图片描述

  • 添加tomcat7插件
    在这里插入图片描述

  • 在pom.xml中添加tomcat7插件后plugins中还是没有tomcat7插件图标

  • 原因:pluginManagement标签锁定插件版本(自动创建时带的)

  • 故需要删除此标签,重新载入一下项目就可以看到了。
    在这里插入图片描述
    在这里插入图片描述

  • 也可以将其配置成运行命令

  • 则按下图执行
    在这里插入图片描述

  • 执行后可以看到出现了运行配置,以后就可以直接点击运行按钮进行运行了
    在这里插入图片描述

  • 可以看到运行成功
    在这里插入图片描述

  • 调试

  • 端口占用处理

  • 重新执行 tomcat:run 命令重启工程,重启之前需手动停止 tomcat,否则报下边的错误:
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值