Maven基础入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Balance_1/article/details/86652944

1.Maven介绍

1.1Maven是什么?

Maven是Apache下的一个纯java开源项目,是一个项目管理工具 ,使用maven对java项目进行构建,依赖管理。

1.2什么是项目构建?

项目构建是一个项目从编写源码代码到编译,测试,运行,打包,部署,运行的过程

1.2.1传统的项目构建:

  • 在eclipse上构建一个java web工程.
  • 在工程中编写源码和配置文件
  • 对源代码进行编译,java文件编译成.class文件。
  • 编写JUnit单元测试
  • 把工程打成war包,部署到tomcat服务器上

1.2.2Maven构建项目的过程

Maven构建项目有都规范化,每个阶段使用一个命令完成

mvn clean:清理输出的.class

mvn compile:将java代码编译成.class文件

mvn package:java工程可以打成war包

mvn tomcat:run运行一个Mavne项目

1.3依赖管理

什么是依赖?一个java项目中可能需要一个其他的第三方jar包才可以运行。也就是说java项目依赖这些第三方jar才可以运行

什么是依赖管理?就是对项目所有依赖的jar包进行规范管理

1.3.1传统项目的依赖管理

传统项目要依赖的jar需要手工完成,需要从网络上加到项目中。

存在的问题:

  • 没有对jar版本统一管理 容易导致版本冲突
  • 从网上找麻烦
  • 直接导入项目到最后工程过大

1.3.2Maven项目的依赖管理

Maven的项目的依赖管理依赖的jar包不需要手动向工程里导入jar包,只需要在pom.xml添加jar包坐标,自动从mavne仓库中下载,运行

好处:

  • 通过pom.xml对jar包的版本进行管理,避免版本不统一
  • Maven团队维护一个非常全maven仓库,可以直接从里面下载,方便。

1.3.3依赖范围

​ A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标是需要指定依赖的范围。依赖的范围包括:

  • compile:编译范围指,A在编译时依赖B,此范围是默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所有编译范围的依赖会被打包。

  • provided:依赖只有在当JDK或者一个容器已提供该依赖之后才使用,provided依赖在编译和测试时需要,在运行时不需要。比如。servlet-api被tomcat容器提供了

  • runtime:依赖在运行、测试时需要,但编译时不需要。比如jdbc驱动包,由于运行是需要所以runtime范围的依赖会打包

  • system:system依赖范围与provided类似,但是必须显示的提供一个对本地系统中的JAR文件路径,需要指定systemPath的路径,system不推荐使用。

在这里插入图片描述

1.3.4依赖传递

​ 即你导入的一个包,还需要另外的包,那么他就会同时把需要的包导入进来

这时候会出现这个问题就是依赖冲突

为何出现依赖冲突呢?

​ 也就是说,导入的两个包同时依赖了同一个包,被同时依赖的包,可能版本之类的都不相同,这样子就产生了依赖冲突。

如何解决依赖冲突呢?

​ 先了解一下,解决冲突的两个原则。

​ 1.第一声明者优先原则

​ 在pom文件中定义依赖,以先声明的依赖为准

​ 2.路径近者优先原则

1.4Maven的好处

在这里插入图片描述

2.Maven的安装

1.下载http://maven.apache.org/download.cgi,当前版本是apache-maven-3.6.0-bin.zip

解压到一个不含有中文的目录下:

bin目录:mvn.bat以run方式运行项目,mvnDebug.bat(debug方式运行)

boot目录:maven加载需要的类加载器

conf目录:setting.xml整个maven工具的核心配置类。

lib目录:maven运行所需要的jar包

2.环境变量配置:

在这里插入图片描述

在这里插入图片描述

通过 mvn -v测试一下:安装成功

在这里插入图片描述

3.Maven仓库

本地仓库:即在你本地的仓库,项目使用的jar和插件都是优先在本地仓库寻找。

远程仓库:不在本地,可能在局域网的服务器上或互联网上的服务器。在本地仓库找不到时,会在远程仓库中寻找。

中央仓库:maven软件中内置的一个远程仓库,他是有maven团队自己维护,里面包括大部分流行的开源项目构件。

在使用maven时,首先从本地仓库中寻找jar包,若没有在从远程仓库找,找到则下载到本地仓库中,从本地仓库使用,若远程仓库没有,则到中央仓库寻找,找到则下载到远程仓库中,从远程仓库下载到远程仓库,在下载到本地仓库中使用。

3.1本地仓库的设置

%\apache-maven-3.6.0\conf目录下找到setting.xml

在这里插入图片描述

配置该标签即可

4.Maven项目工程的目录约束

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

5.Mavne的生命周期

maven对项目的构建过程有三套相互独立的生命周期

Clean Lifecycle 在进行真正构建的清理工作。

Default Lifecycle 构建核心部分,编译,测试,打包,部署。

Site Lifecycle 生成项目报告,站点,发布站点。

6.Maven的概念模型

maven概念模型包括:项目对象模型(Project Object Model)、依赖管理系统(Dependency Managerment System)、

一个项目生命周期(Project Lifecycle)、一组标准集合、插件目标(Plugin goal)

在这里插入图片描述

  • 项目对象模型(Project Object Model)

    ​ 一个Maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等

  • 依赖管理系统(Dependency Managerment System)

    ​ 通过maven的依赖管理对项目所依赖的jar包进行统一管理。

  • 一个项目生命周期(Project Lifecycle)

    ​ 使用Maven完成项目构建时,项目构建的过程分为,清理,编译,测试,部署等过程,maven将这些过程规范为一个生命周期。maven通过执行一些简单命令即可实现生命周期的各个过程。

  • 一组标准集合

    ​ maven将整个项目中管理过程中定义了一些标准,比如,通过maven构建有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标管理。

  • 插件目标(Plugin goal)

    ​ maven管理项目生命周期过程都都是基于插件完成的。

猜你喜欢

转载自blog.csdn.net/Balance_1/article/details/86652944