Maven入门(作用,安装配置,Idea基础maven,Maven依赖,Maven构建项目)【详解】

目录

[一. Maven的作用](#一. Maven的作用)

1.依赖管理

2.统一项目结构

3.项目构建

二.Maven安装配置

[1. Maven的仓库类型](#1. Maven的仓库类型)

[2 加载jar的顺序](#2 加载jar的顺序)

[3. Maven安装配置](#3. Maven安装配置)

4.安装Maven

5.配置仓库

三.idea集成maven

1.给当前project集成maven

2.给新建project集成maven

3.创建maven项目

4.pom.xml说明

四.Maven管理依赖

[1. 引入依赖【重点】](#1. 引入依赖【重点】)

2.依赖范围

[3. 使用示例](#3. 使用示例)

[4. 依赖传递](#4. 依赖传递)

五.Maven构建项目

[1 常见的构建命令:](#1 常见的构建命令:)

[2 构建项目](#2 构建项目)

[3. 项目构建的生命周期](#3. 项目构建的生命周期)

Maven:中文翻译是"专家"、"内行",它是Apache提供的免费开源的项目管理和构建工具

官网:Maven -- Welcome to Apache Maven

一. Maven的作用

  • 依赖管理

  • 统一项目结构规范

  • 构建项目

1.依赖管理

一个企业级项目通常要依赖大量的jar包,这会导致一些问题的产生,比如:

  • 需要自己查找、下载、导入jar包到项目

  • jar包之间可能会产生冲突

2.统一项目结构

使用不同的IDE工具创建的项目结构是不同的,这会导致代码上也会出现差异。而maven提供了标准的、统一的项目结构,屏蔽了开发工具造成的差异。

3.项目构建

Maven提供了一套标准的、跨平台的自动化项目构建方式,它只需要通过简单的命令就能够对项目进行编译、测试、打包、安装、发布等等一系列的操作,实现一键构建项目。

无论是开发人员,还是测试、运维人员,maven都可以提供有力的工作支撑。

二.Maven安装配置

1. Maven的仓库类型

仓库类型:

根据仓库所在的位置不同,可分为:

  • 本地仓库:

    • 本地缓存jar包的文件夹

    • 本地仓库默认在:C:\Users\电脑的用户名\.m2\repository

    • 通常会修改配置文件,修改本地仓库的路径

  • 远程仓库(私服):

    • 一些企业、组织、社区搭建的仓库服务,私服里的jar包大多数还是来自于中央仓库

    • 有些是企业内部自己搭建、自己使用的;

  • 中央仓库

    • 是Maven官方团队维护的仓库,里边有最全的开源jar包。

      但是没有授权的jar包,中央仓库里没有,比如:Oracle驱动包

    • 地址:Central Repository:

2 加载jar的顺序

maven加载jar包的顺序:

  1. maven只会从本地仓库里查找并加载jar包。如果本地仓库里找不到jar包,就会:

    • 如果配置了远程仓库,就从远程仓库里查找jar包,下载到本地仓库

    • 如果没有配置远程仓库,就从中央仓库里查找jar包,下载到本地仓库

  2. 然后maven仍然是从本地仓库中加载jar包

3. Maven安装配置

下载Maven:3.5.x或3.6.x都可以

|--bin Maven的可执行命令文件夹

|--boot Maven的引导程序(类加载器)

|--conf 配置文件夹

|--lib Maven的核心程序代码

4.安装Maven

注意:我们使用的maven3.5 或maven3.6版本,依赖于jdk11;过高版本的jdk,会导致maven运行出错;

1.解压Maven

Maven是免安装的,直接解压即可。但是要注意:解压路径里,不要有中文、空格、特殊字符。例如,我的maven解压到了C:/programs/apache-maven

2.配置Maven环境变量

增加MAVEN_HOME=Maven的解压目录。要注意:这个解压目录必须是 里边有bin、conf等等那些文件夹

修改Path中添加 %MAVEN_HOME%\bin

3.验证Maven配置

打开cmd,输入命令:mvn -versionmvn -v,如果正常输出maven版本信息,说明maven安装成功

5.配置仓库

1.配置Aliyun镜像地址

我们的maven没有私服,所以本地仓库里没有的jar包,maven会直接从中央仓库里查找下载。而中央仓库服务器在国外,速度慢且不稳定,经常会下载失败。

Aliyun提供了maven仓库镜像服务,我们把Aliyun的镜像服务地址配置给maven,就会从阿里云下载jar包,速度很快。

<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>*</mirrorOf>
 <name>阿里云公共仓库</name>
 <url>https://maven.aliyun.com/repository/public</url>
</mirror>

2.配置本地仓库

默认情况下,maven会使用C:\Users\liuyp\.m2\repository作为本地仓库。如果你的C盘比较小,可以自定义本地仓库的路径。

配置方式:

  1. 打开maven里的conf/settings.xml

  2. 增加配置<localRepository>本地仓库路径</localRepository>

三.idea集成maven

注意:在File-Settings里配置,同时在File-OtherSettings-Settings for New projects里也配置

1.给当前project集成maven

配置Maven

增加运行的参数:-DarchetypeCatalog=local,让Maven从本地仓库加载骨架信息;选择使用JDK11

2.给新建project集成maven

上面仅仅针对当前打开的project有效。如果再新建project的话,maven仍然是未配置状态,还需要再次集成。所以这里做一下全局的maven集成,后期再创建新project时,maven也会默认生效。

在这里配置maven和Runder

3.创建maven项目

后期每次创建一个项目,全部都创建成project

创建Project

坐标:被maven管理的所有项目包括jar包,都必须一个唯一标识。这个唯一标识就是坐标

坐标由三部分组成:

  • groupId:通常是公司或组织的域名倒写。例如:com.itheima, com.jd

  • artifactId:项目名

  • version:版本号

4.pom.xml说明

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>

    <!-- 当前项目的坐标 -->
    <groupId>com.itheima</groupId>
    <artifactId>day04-maven-project1</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <!-- 打包方式。常用的有jar和war。如果不设置,默认是jar -->
    <packaging>jar</packaging>

    <!-- 项目的一些属性参数配置 -->
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

四.Maven管理依赖

1. 引入依赖【重点】

如果项目中需要使用jar包,只需要把jar包的坐标配置到项目的pom.xml中即可。在pom.xml的<dependencies>标签里增加依赖坐标

可以使用 alt+insert,会弹出依赖导入的界面,可以从本地仓库里搜索依赖

如果不知道依赖的坐标,可以从中央仓库搜索坐标:https://mvnrepository.com/

2.依赖范围

如果项目中引入的jar包过多,可能会出现jar包冲突 ,我们可能设置jar包不同的依赖范围来处理jar包冲突。

Maven的依赖范围有:

  • compile:默认的依赖范围,全范围有效。

  • test:单元测试有效。src/test里有效,src/main里无效。打包时会忽略

  • provided:编译时有效,运行时使用其它地方提供的jar包。备胎。打包时会忽略

  • runtime:运行时有效,编译时无效。比如:数据库驱动包

  • system:引入仓库之外的本地jar包。少用

实际开发中特殊的jar包

  • Junit:依赖范围通常设置为test

  • servlet-api, jsp-api:依赖范围通常设置为provided

  • 数据库驱动包:依赖范围可以是默认的,也可以是runtime

  • 其它包,绝对多数都是默认依赖范围

3. 使用示例

如果项目中要使用单元测试和logback,就添加依赖两者的依赖坐标。最终pom.xml如下:

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>

    <!-- 当前项目的坐标 -->
    <groupId>com.itheima</groupId>
    <artifactId>day04-maven-project1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 项目的一些属性参数配置 -->
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 项目依赖 -->
    <dependencies>
        <!--单元测试的依赖。依赖范围test-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--logback的依赖。依赖范围 默认的compile-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>
    </dependencies>
</project>

4. 依赖传递

1.依赖传递:

maven中添加的依赖是具有传递性的,即:项目依赖于A,而A依赖于B,maven会将A和B都帮我们导入进来。例如:刚刚我们添加了junit和logback两个坐标,而实际上导入了5个依赖。

2.依赖冲突的处理:

依赖传递可以帮我们减少pom.xml的代码量,但是也可能会造成依赖冲突。例如:

  • 项目依赖于A,A依赖于X(v1版本)

  • 项目依赖于B,B依赖于X(v2版本)

要想解决依赖冲突,可以使用maven的exclusions标签:

XML 复制代码
<!--logback的依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <exclusions>
                <!--排除掉 间接引用进来的slf4j-api-->
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--我们自己添加要引入的slf4j-api的坐标 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.22</version>
        </dependency>

五.Maven构建项目

  1. 在idea里构建项目

对项目代码进行编译、测试、打包、安装、发布等等一系列的操作过程,叫构建

maven可以通过命令,实现一键构建项目

1 常见的构建命令:

  • clean:清理。把之前编译的结果(target文件夹)删除掉

  • compile:编译。编译项目内src\main里的主体代码,编译结果会放到自动生成的target文件夹里

  • test:单元测试。编译并执行src\test里的单元测试代码

  • package:打包。把编译结果制作成程序包。

    如果打包方式是war,就打成war包

    如果打包方式是jar,或者没有配置打包方式,就打成jar包

  • install:安装。把程序包安装到本地仓库

  • deploy:发布。把程序包发布到私服上

2 构建项目

方式一:直接点击按钮

  1. 在idea右侧点击maven,在弹出的窗口中刷新一下

  2. 找到要操作的项目,在Lifecycle中找到要执行的命令,双击即可执行

方式二:输入命令执行

3. 项目构建的生命周期

Maven的三套生命周期:

  1. 清理生命周期:CleanLifeCycle

    有常用命令:clean

  2. 默认生命周期(构建生命周期):DefaultLifeCycle

    有常用命令:compile->test->package->install->deploy

  3. 站点生命周期:SiteLifeCycle

    有常用命令:site。生成Maven项目的描述信息文档

生命周期的作用:如果执行了一个目标命令:Maven会把生命周期里的命令,从第一个一直执行到目标命令为止

相关推荐
薯条不要番茄酱几秒前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
努力进修9 分钟前
“探索Java List的无限可能:从基础到高级应用“
java·开发语言·list
politeboy10 分钟前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes
Daniel 大东1 小时前
BugJson因为json格式问题OOM怎么办
java·安全
Theodore_10225 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸6 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象7 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了7 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·7 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic8 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端