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

目录

一. 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.mfbz.cn/a/434181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

闫震海:腾讯音乐空间音频技术的发展和应用 | 演讲嘉宾公布

一、3D 音频 3D 音频分论坛将于3月27日同期举办&#xff01; 3D音频技术不仅能够提供更加真实、沉浸的虚拟世界体验&#xff0c;跨越时空的限制&#xff0c;探索未知的世界。同时&#xff0c;提供更加丰富、立体的情感表达和交流方式&#xff0c;让人类能够更加深入地理解彼此&…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton&#xff08;默认情况下&#xff09;为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

Linux之cd、pwd、mkdir 命令

cd命令&#xff0c;切换目录 1&#xff09;当Linux终端&#xff08;命令行&#xff09;打开的时候&#xff0c;会默认以用户的HOME目录作为当前的工作目录。 2&#xff09;我们可以通过cd命令&#xff0c;更改当前所在的工作目录。 3&#xff09;cd命令来自英文&#xff1a;C…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型&#xff0c;然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

11. C语言标准函数库

C语言制定了一组使用方式通用的函数&#xff0c;称为C语言标准函数库&#xff0c;用于实现编程常用功能&#xff0c;标准函数库由编译器系统提供&#xff0c;并按功能分类存储在不同源代码文件中&#xff0c;调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…

操作教程|使用MeterSphere对恒生UFX系统进行压力测试

恒生UFX&#xff08;United Finance Exchange&#xff0c;统一金融交换&#xff09;系统&#xff08;以下简称为“UFX系统”&#xff09;&#xff0c;是一款帮助证券公司统一管理外部接入客户的系统&#xff0c;该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…

【CSP试题回顾】201604-1-折点计数

CSP-201604-1-折点计数 解题代码 #include <iostream> #include <vector> #include <algorithm> using namespace std;int n, pointSum;int main() {cin >> n;vector<int>myData(n);for (int i 0; i < n; i){cin >> myData[i];}// 统…

LinkedList集合源码分析

LinkedList集合源码分析 文章目录 LinkedList集合源码分析一、字段分析二、构造函数分析三、方法分析四、总结 看到实现了Deque 就要联想到这个数据结构肯定是属于双端队列了。Queue 表示队列&#xff0c;Deque表示双端队列。 一、字段分析 LinkedList 字段很少&#xff0c;就…

Python影像分析-根据卫星图像估算土壤湿度

在这篇文章中,我将讨论用于估计土壤湿度的最流行的模型,称为梯形模型。该模型源自卫星,这些卫星以一致的比例和分辨率提供地表温度和植被指数,例如归一化植被指数 (NDVI)。” 目录 🌟简介📥下载 Sentinel-3 表面温度和 NDVI 图像📉绘制 NDVI 与 LST(梯形空间)的图�…

Python爬虫:设置随机 User-Agent

Python爬虫&#xff1a;设置随机 User-Agent 在Python中编写爬虫时&#xff0c;为了模拟真实用户的行为并防止被服务器识别为爬虫&#xff0c;通常需要设置随机的User-Agent。你可以使用fake-useragent库来实现这一功能。首先&#xff0c;你需要安装fake-useragent库&#xff…

【C++专栏】C++入门 | 命名空间、输入输出、缺省参数

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;C专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家 点赞&#x1f44d;收藏⭐评论✍ C入门 | 命名空间、输入输出、缺省参数 文章编号&#xff1a;C入门 / 0…

基于stm32的电压采样与质量检测系统

150基于stm32的电压采样与质量检测系统[proteus仿真] 电压检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于stm32的电压采样与质量检测系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xf…

【递归搜索回溯专栏】专题一递归:汉诺塔

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

java性能调优面试,程序员Java视频

前言 很多人在打算自学Java的时候或许都没有思考过Java的应用方向&#xff0c;市场需要什么样的人才&#xff0c;企业对你有什么要求等等一系列问题&#xff1b;或许你只听说这个行业薪资高…然后懵懵懂懂的上路&#xff0c;不得要害。 对于零基础来学习Java&#xff0c;你或…

Go 简单设计和实现可扩展、高性能的泛型本地缓存

相信大家对于缓存这个词都不陌生&#xff0c;但凡追求高性能的业务场景&#xff0c;一般都会使用缓存&#xff0c;它可以提高数据的检索速度&#xff0c;减少数据库的压力。缓存大体分为两类&#xff1a;本地缓存和分布式缓存&#xff08;如 Redis&#xff09;。本地缓存适用于…

正向代理和反向代理区别

正向代理和反向代理的区别&#xff1a; 特点正向代理反向代理位置位于客户端和目标服务器之间位于目标服务器和客户端之间代理对象代理服务器代表客户端发送请求到目标服务器代理服务器代表目标服务器接收客户端的请求配置客户端需要手动配置代理服务器客户端不需要知道代理服…

阻塞队列、生产者消费者模型、阻塞队列的模拟实现等干货

文章目录 &#x1f490;生产者消费者模型&#x1f490;模拟实现阻塞队列&#x1f4a1;注意点一&#x1f4a1;注意点二 阻塞队列是一种“特殊”的数据结构&#xff0c;但是也遵循队列的“先进先出”特性&#xff0c;它的特殊在于&#xff1a; 阻塞队列的两个特性&#xff1a; 1…

Java精品项目--第7期基于SpringBoot的驾校后台管理系统的设计分析与实现

项目使用技术栈 JavaSpringBootMavenMySQLMyBatisShiroHTMLVue.js&#xff08;非前后端分离&#xff09;… 项目截图

vue3组件通信有哪几种方式?

文章目录 一、父子通信1、props2、模板引用ref和defineExpose 二、跨层级传递数据provid和inject 一、父子通信 1、props 父组件中给子组件绑定属性子组件内通过props选项接收 子传父&#xff0c;通过defineEmits,先声明事件&#xff0c;再emit触发 2、模板引用ref和define…

LabVIEW高精度天线自动测试系统

LabVIEW高精度天线自动测试系统 系统是一个集成了LabVIEW软件的自动化天线测试平台&#xff0c;提高天线性能测试的精度与效率。系统通过远程控制测试仪表&#xff0c;实现了数据采集、方向图绘制、参数计算等功能&#xff0c;特别适用于对天线辐射特性的精确测量。 在天线的…
最新文章