什么是Maven、如何使用Maven、Maven项目结构、简单的Mavenjava项目、Maven常用命令、Maven项目之间的引用、Maven依赖的传递、可选、排除、Maven的生命周期-day01

第一节 Maven入门

1.1 什么是Maven

  • Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
  • Maven是跨平台的项目管理工具,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  • 相当于iOS cocoapods
  • Maven的好处:
    1. 方便jar的管理
    2. 不需要上传jar包到svn
    3. 以后项目中要使用jar包可以使用Maven来管理(jar包不在项目中,在Maven仓库),只需要引入Maven依赖(jar包坐标),使得多个项目只需要使用一套jar即可(节省磁盘空间),项目完成后使用Maven命令将(web)项目打成war包也会把项目所需的jar包含进去。
    4. 而且jar包的版本问题也容易解决,修改依赖即可

1.2 如何使用Maven

第一步:下载Maven

  • Maven无需安装,下载后解压即可
  • Maven下载地址:https://archive.apache.org/dist/maven/maven-3/.
  • 这里使用的是3.5.0版本,也可以使用最新的3.6.3
    在这里插入图片描述
  • .tar.gz是linux系统和macOS下使用
    在这里插入图片描述
  • 解压到自己想要放的位置
    在这里插入图片描述

第二步:配置Maven的环境变量

  • 配置环境变量的目的是为了在dos中快捷、方便的使用Maven的一些命令
  • 右键此电脑->属性->高级系统设置->高级->环境变量
    在这里插入图片描述
  • 在系统变量中新建MAVEN_HOME
    在这里插入图片描述
  • 系统变量中的选中Path,编辑
    在这里插入图片描述
  • 配置完成后一路确定即可
  • (Win+R)输入cmd,打开终端,在里面输入 mvn -v(或mvn -verison),类似如下画面即Maven环境变量配置成功
    在这里插入图片描述

第三步:了解什么是Maven仓库

  1. Maven本地仓库:一般用户只会为自己配置一个本地仓库
    • Maven本地仓库是用来干啥的?
      其实就是用来存放网上下载到本地的jar包。
    • Maven本地仓库的路径默认情况下是在用户目录下 C:\User\xxx\.m2\repository 可修改
  2. Maven远程仓库【私服】
    私服:是一种特殊的远程仓库,它是架设在局域网内的仓库,nexus就是用来创建maven的私服的,也就是提高依赖的下载速度,用阿里云的私服就好(一般公司有自己的私服)
  3. Maven中央仓库
    Maven默认的远程仓库,不包含版权资源,存放了几乎所有的开源jar(但是一般中央仓库的地址下载都比较慢,使用国内阿里云的中央仓库即可)
    在这里插入图片描述

第四步:修改setting.xml配置文件

  • 配置本地的Maven仓库路径,在Maven解压文件目录下的conf/settings.xml中修改
    在这里插入图片描述
  • 查看setting.xml配置文件,看到Default:(默认)是在用户目录下的.m2\repository中
    在这里插入图片描述
  • 复制下面一行,添加本地存放路径(这样配置后,默认配置将不再生效,jar包将存放在设置的路径下,找本地jar的时候,也先在这里面找)
<localRepository>D:\Maven_localRepository</localRepository>
  • 继续往下看,maven默认会从上面的服务器(中央仓库) 下载 jar包到本地,由于是国外的服务器,下载jar的速度相对来说会很慢,不使用它,使用国内比较好的阿里云服务器下载jar,速度会快不少
    在这里插入图片描述
	<mirror>
      <id>aliyun</id>
      <mirrorOf>aliyun</mirrorOf>
      <name>aliyun Maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  • 打开终端,输入 mvn help:system 回车执行(出现以下页面就表示下载完成)
  • (mvn help:system执行Maven的帮助系统下载一些基本的jar和插件)
    在这里插入图片描述
    在这里插入图片描述

1.3 Maven的项目结构

  • 普通maven java项目的结构
ProjectName
  |-src
  |   |-main
  |   |  |-java        —— 核心代码部分.java
  |   |  |-resources   —— 配置文件部分(spring、hibernate、mybatis、struts2等)
  |   |-test
  |      |-java        —— 存放所有测试.java文件,如JUnit测试类
  |      |-resources   —— 测试资源配置文件
  |-target             —— 目标文件输出位置例如.class、.jar、.war文件
  |-pom.xml            —— maven项目核心配置文件

  • maven javaWeb项目的结构(多了一个webapp存储页面资源)
ProjectName
  |-src
  |   |-main
  |   |  |-java        —— 核心代码部分.java
  |   |  |-resources   —— 配置文件部分(spring、hibernate、mybatis、struts2等)
  |   |  |-webapp      —— 页面资源、js、css、图片等
  |   |-test
  |      |-java        —— 存放所有测试.java文件,如JUnit测试类
  |      |-resources   —— 测试资源配置文件
  |-target             —— 目标文件输出位置例如.class、.jar、.war文件
  |-pom.xml            —— maven项目核心配置文件

  • maven打包时会自动除去test包(测试)下的文件和资源,减轻项目大小。

1.4 在intellij idea中创建一个简单的javaMaven项目

在这里插入图片描述
在这里插入图片描述

  • finish后,如果是第一次创建要等待一段时间,下载相关jar包
  • 如果有报错,可以在本地仓库中删除报错的对应的插件,再刷新一下
    在这里插入图片描述
  • 其它设置
    在这里插入图片描述
  • 再为创建新项目时设置配置,否则每次创建项目都要重新配置很麻烦
    在这里插入图片描述
  • 设置先加载本地插件(每次创建项目都去中央仓库下载插件会很慢,设置先加载本地仓库)
  • (-DarchetypeCatalog=internal)
    在这里插入图片描述
  • 创建好的项目缺少一个resources目录,有需要可自行补上
    在这里插入图片描述
    在这里插入图片描述

1.5 Maven的常用命令

  • 写一个简单的例子用于命令的使用
    在这里插入图片描述
  • 直接写@Test会报错,Alt+Enter导入,pom.xml中的依赖会自动加上(在main下写的test不要修改scope为test)
    在这里插入图片描述
  • 可以选择右侧的Maven,执行相关操作(点击即可直接执行)
    在这里插入图片描述
  • 除了上面的简便操作外,下面在终端中也可以使用这些命令(要进入项目目录中使用命令 )

mvn compile

  • 完成编译操作
  • 执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。
    在这里插入图片描述
  • 双击compile同效果
    在这里插入图片描述

在这里插入图片描述

mvn clean

  • 执行完毕后,会将target目录删除。
    在这里插入图片描述
  • 双击clean同效果
    在这里插入图片描述
  • clean后无target目录
    在这里插入图片描述

mvn test

  • 完成单元测试操作
  • 执行完毕后,会在target目录中生成:surefire-reports(测试报告)、test-classes(测试的字节码文件)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

mvn package

  • 完成打包操作
  • 执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war
  • 普通项目.jar,web项目.war
    在这里插入图片描述
    在这里插入图片描述
  • 打开jar会发现,只会保存上面main下的文件,test下的将不会进入打包的文件中(由于我这里是直接写在了main的java下,也就直接看到了,可自行测试)
    在这里插入图片描述
  • 同样双击package即可
    在这里插入图片描述

mvn install

  • 执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作
  • 执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用
    在这里插入图片描述
  • 双击install,同样效果
    在这里插入图片描述
  • 可在本地仓库中找到,方便其它项目引用
    在这里插入图片描述

mvn 组合命令

  • mvn clean compile(先清除再编译)
  • mvn clean test(先清除再测试)
  • mvn clean package(先清除再打包)
  • mvn clean install(先清除再安装)
  • 终端中直接输入即可,intellij idea中也提供了
    在这里插入图片描述
    在这里插入图片描述

1.6 一个项目引用另一个项目

  1. 使用骨架(模板)创建一个普通的Mavenjava项目
    在这里插入图片描述
  • 使用模板创建的普通javaMaven项目少2个resources目录
    在这里插入图片描述
  • 写一个简单的test,运行一下,然后将它install安装到本地
    在这里插入图片描述
    在这里插入图片描述
  • 在项目中新建一个Module,也使用骨架创建一个Maven_java2
    在这里插入图片描述
  • 在Maven_java2中添加上一个项目的依赖(上一个项目要记得install安装到本地,否则可能找不到依赖)
    在这里插入图片描述
  • 使用
    在这里插入图片描述

第二节 Maven的核心概念

2.1 坐标(gav)

  • 在平面几何中坐标(x,y)可以标识平面中唯一的一点。
    在maven中坐标就是为了定位一个唯一确定的jar包。
  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范,拥有了统一规范,就可以把查找工作交给机器
  • Maven坐标主要组成(GAV)确定一个jar在互联网位置
    • groupId:定义当前Maven组织名称
    • artifactId:定义实际项目名称
    • version:定义当前项目的当前版本
      在这里插入图片描述

2.2 坐标的查找

  • 访问:http://www.mvnrepository.com.
  • 或访问:https://search.maven.org/.
  • 或直接百度输入maven第一个就是
    在这里插入图片描述
  • 例如要使用spring,输入sping,回车,选择所需要的jar和版本,就能看到所需要的jar的坐标了,复制进项目的pom.xml中的依赖中即可
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 依赖管理

scope 依赖范围

在这里插入图片描述

  • 其中依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系。
  • 主要的是三种依赖关系如下:
    • compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    • test:测试依赖范围。只对于测试classpath有效。
    • provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效,因为由容器已经提供。例如:servlet-api
    • runtime:运行时提供。例如:jdbc驱动

依赖传递

  • 直接依赖和间接依赖
    • Maven_java2依赖 Maven_java,Maven_java3依赖Maven_java2
    • Maven_java2直接依赖Maven_java,Maven_java3间接依赖Maven_java
      在这里插入图片描述
  • 写成test就只能在当前的test包下使用
    在这里插入图片描述
  • 2依赖1
    在这里插入图片描述
  • 3依赖2
    在这里插入图片描述
  • 范围是compile的时候,依赖可以传递
    在这里插入图片描述
  • 范围是test的时候,依赖不会得以传递(如果自己也不配置,2和3使用junit都会报错)
    在这里插入图片描述
  • 如果2中设置了junit4.12且是compile,那么3会就近依赖使用2中的junit(无关乎版本,就是就近)

可选依赖

  • <optional> true/false</optional> 是否可选,也可以理解为是否向下传递。
  • 在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false
  • 在2中设置不向下传递,由于3中没有配置junit,而2又不向它传递会直接报错
    在这里插入图片描述

排除依赖

  • exclusions可用于排除依赖,注意exclusions是写在dependency中
  • 在3中设置排除1传递的依赖,因为2依赖1,3依赖2,所以默认的3中会有1的依赖,可以使用exclusions将其排除
    在这里插入图片描述

2.4 生命周期

  • Maven生命周期就是为了对所有的构建过程进行抽象和统一。

  • 包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。

  • 生命周期可以理解为构建工程的步骤。

  • 在Maven中有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

    • Clean Lifecycle: 在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。
    • Site Lifecycle: 生成项目报告,站点,发布站点。

Clean生命周期:清理项目

  • Clean生命周期一共包含了三个阶段:
pre-clean 执行一些需要在clean之前完成的工作 
clean 移除所有上一次构建生成的文件 
post-clean 执行一些需要在clean之后立刻完成的工作 
  • 也就是说,mvn clean 等同于 mvn pre-clean clean
  • 如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。
  • 这是Maven很重要的一个规则,可以大大简化命令行的输入。

Default生命周期:构造项目

  • Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段
validate 
generate-sources 
process-sources 
generate-resources 
process-resources 复制并处理资源文件,至目标目录,准备打包。 
compile 编译项目的源代码。 
process-classes 
generate-test-sources 
process-test-sources 
generate-test-resources 
process-test-resources 复制并处理资源文件,至目标测试目录。 
test-compile 编译测试源代码。 
process-test-classes 
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 
prepare-package 
package 接受编译好的代码,打包成可发布的格式,如 JAR、WAR
pre-integration-test 
integration-test 
post-integration-test 
verify 
install 将包安装至本地仓库,以让其它项目依赖。 
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
  • 运行任何一个阶段的时候,它前面的所有阶段都会被运行
  • 这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包,安装到本地仓库
  • 此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

Sit生命周期:生成项目站点

  • 这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能
pre-site 执行一些需要在生成站点文档之前完成的工作 
site 生成项目的站点文档 
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 
site-deploy 将生成的站点文档部署到特定的服务器上 

猜你喜欢

转载自blog.csdn.net/qq_43414199/article/details/109049076