Maven基础讲解

一、什么是Maven

1. Maven简介

  • Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

1.1 Maven能解决的问题

项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:

  • 我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
  • 世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
  • 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

Maven可以帮你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点。

1.2 Maven的优势举例

  • 前面的 Web 阶段项目,要能够将项目运行起来,就必须将该项目所依赖的一些 jar 包添加到工程中,否则项目就不能运行。试想如果具有相同架构的项目有十个,那么我们就需要将这一份 jar包复制到十个不同的工程中。我们一起来看一个 CRM项目的工程大小。
  • 使用传统 Web 项目构建的 CRM 项目如下:
    在这里插入图片描述
  • 原因主要是因为上面的 WEB 程序要运行,我们必须将项目运行所需的 Jar 包复制到工程目录中,从而导致了工程很大。
  • 同样的项目,如果我们使用 Maven 工程来构建,会发现总体上工程的大小会少很多。如下图:
    在这里插入图片描述

2. Maven的两个经典作用

2.1 Maven 的依赖管理

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

2.2 项目的一键构建

  • 我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
  • 一键构建,指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。

二、Maven的使用

1. 下载

在官网中下载maven包,Maven官网
在这里插入图片描述

2. 安装

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,解压后目录结构如下:
在这里插入图片描述

  • bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
  • boot:存放了一些 maven 本身的引导程序,如类加载器等
  • conf:存放了 maven 的一些配置文件,如 setting.xml 文件
  • lib:存放了 maven 本身运行所需的一些 jar 包

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

3. 配置环境变量

  • 新建系统变量:MAVEN_HOME
    变量值:自定义的路径 + \Maven\apache-maven-3.2.3
  • 编辑系统变量:Path
    添加变量值:%MAVEN_HOME%\bin
  • 查看是否配置成功:用win键+R,进入dos命令,输入mvn -v,出现如下信息则表明成功!
    在这里插入图片描述

4. Maven仓库

4.1 Maven仓库的分类

maven 的工作需要从仓库下载一些 jar 包,本地的项目 A、项目 B 等都会通过 maven软件从远程仓库(互联网上的仓库)下载 jar 包并存在本地仓库(一个文件夹),当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了,这儿有点git从远程拉取的感脚。

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找,默认本地仓库位置在${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。本地仓库的位置可以自定义。
  • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网。
  • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

4.2 Maven本地仓库的配置

  • 在 MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置(maven 的安装目录下)
  • 打开 settings.xml文件
    在这里插入图片描述

5. Maven工程

5.1 Maven 工程的目录结构

在这里插入图片描述
进入 src 目录后,我们发现它里面的目录结构如下:
在这里插入图片描述
如果是普通的 java 项目,那么就没有 webapp 目录。

三、Maven基本命令

1. compile:编译

将java源文件编译成class文件

2. test:测试项目

执行test目录下的测试用例

3. package:打包

将项目打成jar包

4. clean:删除target文件夹

5. install:安装

6. deploy

把本地jar包发送到远程仓库(私服)。
执行的插件:maven-deploy-plugin:2.8.2:deploy

四、Maven坐标

1. Maven坐标

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
如下代码中,groupId和artifactId构成了一个Jar包的坐标。

	<!-- 依赖关系 -->
	<dependencies>
		<!-- 此项目运行使用 junit,所以此项目依赖 junit -->
		<dependency>
			<!-- junit 的项目名称 -->
			<groupId>junit</groupId>
			<!-- junit 的模块名称 -->
			<artifactId>junit</artifactId>
			<!-- junit 版本 -->
			<version>4.9</version>
			<!-- 依赖范围:单元测试时使用 junit -->
			<scope>test</scope>
		</dependency>
	</dependencies>

2. 传递依赖 与 排除依赖

  • 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用的Jar包都下载到本地。
  • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
<exclusions>
   <exclusion>
      <groupId>cn.ydg123.Web</groupId>
      <artifactId>resource-search</artifactId>
      <packaging>pom</packaging>
      <version>1.0-SNAPSHOT</version>
   </exclusion>
</exclusions>

3. 依赖范围scop

在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。

  • compile :默认范围,用于编译
  • provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
  • runtime: 在执行时需要使用
  • test: 用于test任务时使用
  • system: 需要外在提供相应的元素。通过systemPath来取得
  • systemPath: 仅用于范围为system。提供相应的路径
  • optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用

五、idea部署maven项目

1. 配置maven

  • 打开->File->Settings 配置 mave
    在这里插入图片描述

2. 创建工程

  • 打开 idea,选择创建一个新工程
    在这里插入图片描述

  • 选择 idea 提供好的 maven 的web 工程模板
    在这里插入图片描述

  • 点击 Next 填写项目信息
    在这里插入图片描述

  • 点击 Next,此处不做改动。
    在这里插入图片描述

  • 点击“finish”,耐心等待,直到出现如下界面
    在这里插入图片描述

  • 手动添加 src/main/java 目录,如下图右键 main 文件夹->New->Directory
    在这里插入图片描述

  • 创建一个新的文件夹命名为 java
    在这里插入图片描述

  • 在新的文件夹 java 上右键->Make Directory as->Sources Root
    在这里插入图片描述

3. 创建一个Servlet

  • src/java/main 创建了一个 Servlet,但报错
    在这里插入图片描述
    要解决问题,就是要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet 的坐标,从而导入它的 jar
  • 在 pom.xml 文件添加坐标,直接打开 hello_maven 工程的 pom.xml 文件
    在这里插入图片描述
  • 添加 jar 包的坐标时,还可以指定这个 jar 包将来的作用范围。
	<!--项目名称,定义为组织名+项目名,类似包名-->
	<groupId>com.itheima</groupId>
	<!-- 模块名称 -->
	<artifactId>hello_maven</artifactId>
	<!-- 当前项目版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本 -->
	<version>0.0.1-SNAPSHOT</version>
	<!--jar:执行 package 会打成 jar 包;war:执行 package 会打成 war 包-->
	<packaging>jar</packaging>

4. 项目中添加的坐标

在这里插入图片描述

5. 设置 jdk 编译版本

	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<configuration>
			<source>1.8</source>
			<target>1.8</target>
			<encoding>UTF-8</encoding>
		</configuration>
	</plugin>

6. 编写servlet与jsp页面

  • 在java文件夹中创建一个servlet的测试类,重定向到一个jsp页面,编写要跳转的jsp页面
    在这里插入图片描述
  • 在 web.xml 中配置 servlet 访问路径
  • 添加 tomcat7 插件
    在 pom 文件中添加如下内容
    在这里插入图片描述
  • 此时点击 idea 最右侧 Maven Projects,
  • 就可以看到我们新添加的 tomcat7 插件
  • 双击 tomcat7插件下 tomcat7:run 命令直接运行项目
  • 运行结果,显示jsp页面
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值