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

news2024/11/24 15:39:34

目录

一. Maven的作用    

1.依赖管理

2.统一项目结构

3.项目构建

二.Maven安装配置

1. Maven的仓库类型

2 加载jar的顺序

3. Maven安装配置

 4.安装Maven

5.配置仓库

三.idea集成maven

1.给当前project集成maven

2.给新建project集成maven

3.创建maven项目

4.pom.xml说明

四.Maven管理依赖

1. 引入依赖【重点】

2.依赖范围

3. 使用示例

4. 依赖传递

五.Maven构建项目

1 常见的构建命令:

2 构建项目

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都可以

  • 各个版本的下载地址:Index of /dist/maven/maven-3

    maven3.6.1下载地址:Index of /dist/maven/maven-3/3.6.1/binaries

    Windows系统下载 .zip

    Mac系统下载 .tar.gz

  • Maven的目录结构:

          |--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 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 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标签:

<!--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会把生命周期里的命令,从第一个一直执行到目标命令为止

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python高级之元类

python高级之元类 一、Type创建类1、传统方式创建类2、非传统方式 二、元类三、总结 一、Type创建类 class A(object):def __init__(self, name):self.name namedef __new__(cls, *args, **kwargs):data object.__new__(cls)return data根据类创建对象 objA(‘kobe’) 1、执…

前端处理接口直接返回的图片

有时候接口会直接返回图片而不是连接&#xff0c;前端需要处理后才能使用。 首先你可能需要设置responseType: blob’处理响应数据格式。 直接使用 将接口及参数动态拼接成img.src直接使用 <img src"http://test.com/api/img?size50x50" alt"">i…

Spring Webflux 详解

目录 0、组件对比 1、WebFlux 1、引入 2、Reactor Core 1、HttpHandler、HttpServer 3、DispatcherHandler 1、请求处理流程 4、注解开发 1、目标方法传参 2.返回值写法 5、文件上传 6、错误处理 7、RequestContext 8、自定义Flux配置 9、Filter WebFlux&am…

python并发编程:阻塞IO

阻塞IO&#xff08;blocking IO&#xff09; 在Linux中&#xff0c;默认情况下所有的socket都是blocking&#xff0c;一个典型的读操作流程大概是这样&#xff1a; 当用户进程调用了recvfrom这个系统调用&#xff0c;kernel就开始了IO的第一个阶段&#xff1a;准备数据。对于…

将Remix和本地文件连接

Remix连接本地文件 推荐使用网页版本的Remix&#xff0c;因为它是实时更新的&#xff0c;还可以连接MetaMask直接进行使用。 打开remix网页&#xff0c;可以通过 create a new workspace新建页面 然后找到我们要连接 的文件目录&#xff0c;在该目录中打开终端&#xff0c;如…

Pytorch学习 day05(RandomCrop、Transforms工具使用总结)

RandomCrop 将PIL或Tensor格式的输入图片&#xff0c;随机裁剪指定尺寸的部分输入尺寸可以为序列或单个整形数字代码如下&#xff1a; from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("i…

通过hyperbeam创建梁单元截面属性

1、为模型中标准的圆柱形创建梁单元和赋予属性&#xff1b; 2、为模型中不标准的对称性实体创建梁单元和赋予属性&#xff1b; 3、为模型中壳体部分创建梁单元和赋予属性&#xff1b;

C++进阶之路---继承(一)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承的概念及定义 1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0…

MybatisPlus入门详解

一、MyBatisPlus 简介 1.1 创建新模块 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency> 由于mp并未被收录到idea的系统内置配置,无法…

外包干了2年,技术退步明显

先说一下自己的情况&#xff0c;研究生&#xff0c;19年进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Android开发中遇到最难的问题,app架构图

前言 这份Android面试真题涵盖了图片&#xff0c;网络和安全机制&#xff0c;网络&#xff0c;数据库&#xff0c;插件化、模块化、组件化、热修复、增量更新、Gradle&#xff0c;架构设计和设计模式&#xff0c;Android Framework 、Android优秀三方库源码等。适合中高级工程…

Windows安装MySQL详细教程

1.1 下载MySQL压缩包 官网下载链接[点击跳转] 按图中选择&#xff0c;然后点击【Download】 点击图中箭头所指方向直接下载 1.2 解压下载好的压缩包后找到【bin】文件夹&#xff0c;并记下文件路径&#xff08;下文将以路径 D:\mysql-8.0.36-winx64\bin 为例&#xff09; 1.…

JavaScript实现点击鼠标弹钢琴的效果

思路&#xff1a; 图片设置宽900px&#xff0c;找到鼠标按下时的x坐标和img距离body的x坐标&#xff0c;两个值相减&#xff0c;然后除100取整&#xff0c;赋值给a&#xff0c;通过判断a的值来确定放出那个音乐。 完整代码&#xff1a; <!DOCTYPE html> <html lan…

【DAY05 软考中级备考笔记】线性表,栈和队列,串数组矩阵和广义表

线性表&#xff0c;栈和队列&#xff0c;串数组矩阵和广义表 2月28日 – 天气&#xff1a;阴转晴 时隔好几天没有学习了&#xff0c;今天补上。明天发工资&#xff0c;开心&#x1f604; 1. 线性表 1.1 线性表的结构 首先线性表的结构分为物理结构和逻辑结构 物理结构按照实…

python GPU加速 以numba为例

GPU编程(CUDA) GPU(图形处理单元)&#xff0c;多核系统&#xff0c;而现今的大多数CPU也属于多核系统&#xff0c;但它们之间还是存在很大的区别: CPU适合执行复杂的逻辑&#xff0c;比如多分支&#xff0c;其核心比较重(复杂)GPU适合执行简单的逻辑&#xff0c;大量的数据计…

JVM内部世界(内存划分,类加载,垃圾回收)

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;JVM内部世界(内存划分,类加载,垃圾回收) 关于JVM的学习主要掌握三方面: JVM内存区的划分类加载垃圾回收 一.JVM内存区的划分 当一个Java进程开始执行时,JVM会首先向操作系统申…

给数字人生成加上界面,基于ER-NeRF/RAD-NeRF/AD-NeRF,Gradio框架构建WEBUI,使用HLS流媒体,实现边推理边播放——之一:在WEBUI中实时输出服务器控制台日志

前言 目前数字人实现技术众多&#xff0c;我这里采用基于ER-NeRF&#xff0c;在这里可以看到其介绍&#xff1a;ICCV 2023 | ER-NeRF: 用于合成高保真Talking Portrait的高效区域感知神经辐射场-https://zhuanlan.zhihu.com/p/644520609ER-NeRF的项目地址&#xff1a;https://…

十四、重写与多态

重写、多态 上一讲是&#xff0c;子类对父类横向上的扩展 这一讲是&#xff0c;子类对父类纵向上的扩展 方法重写 使用override关键字重写父类的方法 将父类原本方法的逻辑更新成新版本的逻辑 注&#xff1a;仅能重写可见的父类成员&#xff0c;并且重写要保持签名一致。 签名一…

第五节 JDBC驱动程序类型

JDBC驱动程序是什么&#xff1f; JDBC驱动程序在JDBC API中实现定义的接口&#xff0c;用于与数据库服务器进行交互。 例如&#xff0c;使用JDBC驱动程序&#xff0c;可以通过发送SQL或数据库命令&#xff0c;然后使用Java接收结果来打开数据库连接并与数据库进行交互。 JDK…

Java中常见的 IO 方式

冯诺依曼结构中计算机结构被分为 5 大部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备&#xff0c;输入设备向计算机输入数据&#xff0c;输出设备接收计算机输出的数据。从计算机结构的视角来看的话&#xff0c; I/O 描述了计算机系统与外部设备之间通信的过程。…