Maven的学习

Maven 安装与配置

今天我们来学习一下Maven,Maven就相当于一个管理的工具,原理就是使用一个插件,这个插件由多个jar包构成。

在一个公司的项目开发过程中,一个大的项目通常被分为好几个小的模块,由不同的人去完成,但是不同的人在开发的过程中,使用的组件,jar包难免会有不同,所以在整合的时候会出现一些版本号不同所导致的一些错误。那么怎么避免这个错误呢?

这就要用到Maven了,Maven在其中的作用就相当于一个中央仓库,每一个开发的人都可以使用Maven中的一些jar包,也可以将自己所完成的jar导入Maven这个中央仓库,在项目开发中这些jar包通常由项目管理人员指定的,这样能最大程度的避免因为版本号不同所导致的错误。

maven概述

一、获取Maven

1、下载Maven

Snipaste_2024-10-22_11-29-10

2、解压Maven压缩包到本地目录

Snipaste_2024-10-22_11-31-31

3、配置D:\soft\apache-maven-3.5.2-bin\apache-maven-3.5.2\conf\settings.xml文件

  • 修改本地仓库地址

Snipaste_2024-10-22_14-01-23

  • 修改镜像源地址

Snipaste_2024-10-22_14-02-33

4、配置环境变量

右击电脑属性,找到高级系统设置,在里面有一个环境变量

image-20241022192916558

在系统环境变量里新建一个MAVEN_HOME,变量名设为解压后的Maven文件根目录

image-20241022193121571

再在系统变量里找到Path变量,在里面加上%MAVEN_HOME%\bin

image-20241022193500032

配置完成后可以打开cmd窗口输入mvn - v查看版本号来验证是否安装成功

image-20241022193819381

到此环境变量就配置好了,Maven也基本下载安装完毕。

二、认识Maven

我们安装完Maven之后可能在想,Maven是什么,有什么功能?

  • Maven翻译成中文就是大师、专家、内行的意思

  • Maven是一款自动化构建工具,专注服务于Java平台的项目构建依赖管理

  • 依赖管理:jar之间的依赖关系,jar包管理问题统称为依赖管理

  • 项目构建:项目构建不等同于创建项目

    ​ 项目构建分成7步,创建项目是一瞬间完成的

    ​ 1、清理

    ​ 2、编译

    ​ 3、测试

    ​ 4、报告

    ​ 5、打包

    ​ 6、安装

    ​ 7、部署

三、Maven与Idea及相关应用

1、首先创建一个Maven项目文件

image-20241022195339458

2、在settings里面搜索Maven,然后在Maven home path里面选择自己下载的版本,并选好settings file 和本地仓库

image-20241022195845042

四、Maven核心

1、pom文件

pom.xml全称:Project Object Model【项目对象模型】,将项目封装为对象模型,便于使用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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--设置工程坐标 -->
    <parent>
        <groupId>com.shujia</groupId>
        <artifactId>Maven</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>java</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
    
</project>

2、Maven约定的目录结构

项目名

src【书写java源代码】

main【书写java主程序代码】

java【书写java代码】

resources【书写配置文件代码】

test【书写测试代码】

java【书写测试java代码】

pom.xml【书写配置文件代码】

target【编译后目录结构

3、Maven的生命周期

Maven的生命周期分为3部分

  • Clean 单独作为一个生命周期
  • compile【编译】,test【测试】,package【打包】,install【安装】,deploy【部署】。是构建的核心部分
  • validate,verify,site是第三部分生成项目报告,站点,发布站点。

image-20241022205154280

生命周期不是一步直接执行的,是在三部分里依次执行,就比如我想要执行package,就必须先执行compile,test,再执行package结束,同理我想要执行,install,就必须先执行compile,test,package,再执行install结束

4、插件与目标

插件:插件的本质就是一些jar包和配置文件构成的

目标:每个插件都能实现多个功能,每个功能就是一个插件目标

5、Maven的仓库【重点】

Maven的仓库分为两种:本地仓库和远程仓库

本地仓库:在自己的计算机上的仓库,仅为当前计算机提供Maven服务

远程仓库:在服务器上的仓库,为其他计算机提供Maven服务

​ 私人服务器:假设在当前局域网环境上的服务器,为当前局域网范围内的计算机

​ 中央仓库:架设在公共Internet上,为全世界所有的Maven工程服务

​ 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请 求。

仓库中的文件类型:jar包

jar包分为:Maven的插件,第三方框架或者工具的jar包,自己研发编写的项目或者模块

6、Maven的坐标【重点】

之前我们在Maven的常用标签里面看来pom文件的内容,其中就有工程坐标,现在我们来学习一下坐标

坐标的作用

使用坐标的目的就是引入jar包,让计算机可以找到jar包的位置,所以被称作坐标

坐标的构成

坐标的结构为g-a-v

[1]groupId:公司或组织的域名倒叙+当前项目的名称

[2]artifactId:当前模块的名字

[3]version:当前模块的版本

要注意的是:在g-a-v中是本地仓库jar包的位置 在a-v中是jar包的全名

坐标的引用

这里有一个很好的网站Maven Repository: Search/Browse/Explore,这个网站汇总了所有的引用jar包坐标,直接在网站上找到这个jar包直接粘贴复制

语法示例:

<dependencies>
            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>${hadoop.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>${hadoop.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.49</version>
            </dependency>


            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>5.1.0</version>
            </dependency>

            <dependency>
                <groupId>com.shujia</groupId>
                <artifactId>maven-demo1</artifactId>
                <version>1.0</version>
            </dependency>

        </dependencies>

五、Maven的依赖管理

1、依赖语法:< scope >

compile【默认值】:在main、test、Tomcat【服务器】下均有效。

test:只能在test目录下有效

provided:在main、test下均有效,Tomcat【服务器】无效。

2、依赖传递性

image-20241022220852526

注意:

先申明者优先

路径最短者优先

Maven可以解决jar包直接的依赖问题

六、Maven中统一管理版本号

1、语法

<properties>
    <junit-version>4.12</junit-version>
</properties>
<dependencies>
    <!--https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>${junit-version}</version>
        <!--            <scope>test</scope>-->
    </dependency>
</dependencies>

七、Maven的继承

1、为什么需要继承

如子工程大部分都共同使用jar包,可以提取父工程中,使用

【继承原理】在子工程中使用

父工程打包方式,必须是pom方式

2、Maven继承方式一

在父工程中的pom.xml中导入jar包,在子工程中统一使用。

【所有子工程强制引入父工程jar包】

<packaging>pom</packaging>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
		<artifactId>junit</artifactId>
        <version>4.12</version>
		<scope>test</scope>
    </dependency>
</dependencies>

3、Maven继承方式二

在父工程中导入jar包【pom.xml】

<packaging>pom</packaging>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
			<artifactId>junit</artifactId>
            <version>4.12</version>
			<scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在子工程引入父工程的相关jar包

<parent>
    <artifactId>maven_demo</artifactId>
	<groupId>com.shujia</groupId>
	<version>1.0-SNAPSHOT</version>
	<relativePath>../pom.xml</relativePath>
</parent>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
		<artifactId>junit</artifactId>
    </dependency>
</dependencies>

注意:在子工程中,不能指定版本号

八、Maven的聚合

1、为什么使用Maven的聚合

优势:只要将子工程聚合到父工程中,就可以实现效果:安装或清除父工程时,子工程会进行同步操作。

注意:Maven会按照依赖顺序自动安装子工程

2、语法

<modules>
    <module>maven_helloworld</module>
    <module>HelloFriend</module>
	<module>MakeFriend</module>
</modules>

经过本章,Maven的基本知识与用法都已经介绍完了!!!如果遗漏欢迎补充!!!!

posted @ 2024-10-22 21:00  小钱没有钱  阅读(4)  评论(0编辑  收藏  举报