一、什么是Maven

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型
在这里插入图片描述

二、Maven有什么用?

(1)项目构建:提供标准的,跨平台的自动化构建项目的方式

(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题

(3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:
在这里插入图片描述
各目录存放资源类型说明:

src/main/java:项目java源码

src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)

src/main/webapp:web资源(比如html,css,js等)

src/test/java:测试代码

src/test/resources:测试相关配置文件

src/pom.xml:项目pom文件

三、Maven下载及安装

https://maven.apache.org/download.cgi在这里插入图片描述
Mavne不需要安装,减压缩可以使用。文件结构
在这里插入图片描述
各目录结构说明:

bin:可执行程序目录,
boot:maven自身的启动加载器
conf:maven配置文件的存放目录
lib:maven运行所需库的存放目录

配置环境变量:
在这里插入图片描述
在这里插入图片描述
然后进入命令提示符
在这里插入图片描述
需要注意的是:依赖java-jdk,而且变量名需要设置为JAVA_HOME,否则会出现错误。

四、仓库和坐标的概念

在这里插入图片描述
仓库有三种:本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库

中央仓库:maven团队自身维护的仓库,属于开源的

私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源(保存具有版权的资源,包含购买或自主研发的jar;一定范围内共享资源,能做到仅对内不对外开放)

本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源
我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标

坐标:maven中的坐标用于描述仓库中资源的位置,相当于放在电脑中不同文件夹的路径。

那maven中的坐标是如何构成的呢?

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>3.0-alpha-2</version>
</dependency>

maven坐标的主要组成如下:

groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

version:定义当前资源的版本号
查询其他资源的坐标可以使用 https://mvnrepository.com/ 这个网站。

五、仓库的配置

配置文件位于conf/setting.xml中文件。
默认的本地仓库位于:${user.home}/.m2/repository,如用户名为zs,则仓库的地址为:C:\Users\zs.m2\repository,不便于管理,我们使用自定义路径:D:\maven\LocalWarehouse
在这里插入图片描述
设置阿里镜像:

<!--配置阿里云maven私有仓库(即配阿里私服)-->
<mirror>
    <id>alimaven</id>
    <mirrorOf>*</mirrorOf>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>


<!-- maven官方镜像 -->
<mirror>
  <id>mirrorId</id>
  <mirrorOf>central</mirrorOf>
  <name>Human Readable Name </name>
  <url>https://repo1.maven.org/maven2/</url>
</mirror>


<!-- 阿里云镜像1 -->
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>https://central.maven.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>
<!-- 阿里云镜像2 -->
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

在这里插入图片描述
设置完成以后,复制一份setting.xml文件,放置在和LocalWarehouse同级目录下。
以后我们使用资源的时候,首先去本地仓库找去,如果没有就去私服或者中央仓库去下载到本地仓库。

maven的构建命令以mvn开头,后面添加功能参数,可以一次性执行多个命令,用空格分离,如果在IDE中可以直接点击右边的菜单就可以完成。

mvn compile:编译
mvn clean:清理
mvn test:测试
mvn package:打包
mvn install:安装到本地仓库

六、在IDE中配置Maven

在这里插入图片描述

但是每次新建项目的时候,都会还原到初始的配置,导致重新下载依赖,解决的方法如下:
在这里插入图片描述
在这里插入图片描述
依赖配置:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--头文件,无需修改-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--    指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0;-->
  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
<!--本项目对应的坐标,如果把这段代码的拷贝到别的项目的pom.xml的dependency中,则这个项目中的依赖就会传递给目标项目,这就是依赖传递-->
  <name>maven04</name>
  <groupId>org.lvmanba</groupId>
  <artifactId>maven04</artifactId>
  <version>1.0-SNAPSHOT</version>
<!--    插件:构建项目所需要的信息-->
  <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>
<!--依赖:设置当前项目运行所需的jar,一个项目可以设置多个依赖,如果引入相同的包,后面的覆盖前面的-->
  <dependencies>
<!--    设置具体依赖-->
    <dependency>
<!--      依赖所属群组id-->
      <groupId>junit</groupId>
<!--      依赖所属项目id-->
      <artifactId>junit</artifactId>
<!--      版本号-->
      <version>4.12</version>
<!--      scope限制该包的作用范围
1、compile:默认的scope,可以在生命周期中使用。
2、provided:scope 只能作用在编译和测试时,同时没有传递性;使用这个时,不会将包打入本项目中,只是依赖过来。
3、runtime:表示dependency不作用在编译时,但会作用在运行和测试时。
4、test:表示dependency作用在测试时,不作用在运行时。
5、system:跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
6、import:它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置。
-->
      <scope>test</scope>
<!--        被继承以后是否显示,相当于私有-->
      <optional>true</optional>
    </dependency>
  </dependencies>

</project>

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

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐