【JavaEE04-后端部分】Maven 小介绍:Java 开发的构建利器基础

那从现在开始,咱们就开始进入Java EE后端学习的一个环节,我们要进入学习之前呢,得先把环境搭建好。我们这里用到的编译工具是我们的idea社区版本,我们想开发一个springboot项目的话,我们对社区版的要求是2021.1~2022.1.4版本,因为社区办想要创建一个spring boot项目,需要安装一个插件,但是这个插件呢还是收费的,如果你想要免费版本的插件的话,我们要求idea版本在2021.1~2022.1.4之间,如果你的idea是专业版本的话,你就可以忽略这些过程,因为我们的专业版本是可以直接去操作的。而我们学习的话主要是使用社区版本去创建我们的Spring boot项目。

从零吃透Maven:新手也能懂的项目管理神器指南

作为刚入门的开发者,你有没有过这样的困扰?写项目时要手动找各种jar包,下载完还要一个个导入,少一个就报错;修改代码后,编译、测试、打包要反复操作,繁琐又容易出错。其实,这些问题只要一个工具就能轻松解决------它就是Maven,一款专为Java项目量身打造的"全能大管家"。今天就用最通俗的语言,结合日常类比,带大家从零吃透Maven,新手也能快速上手。

一、前置准备:给"管家"搭好工作环境

Maven通常和IDEA搭配使用,就像管家需要一个合适的工作室,我们得先确保IDEA版本能适配它,否则后续工作会出岔子。

先自检你的IDEA版本:如果用的是社区版,建议选择2021.1到2022.1.4之间的版本;如果是专业版,就不用纠结版本,随便用都可以。要是你的IDEA不在这个范围,就得卸载重新安装了。

这里提醒大家一个卸载关键点:卸载时一定要删除注册表!很多人卸载后重新安装仍有问题,就是因为注册表没清干净。

二、认识Maven:它到底是个"什么角色"?

Maven工具是有Apache组织使用Java技术开发的一个项目管理工具。【Maven这个东西是Java开发的所以潜台词就是说,你要想使用这个工具,你得下载JDK】

2.1 官方定义太晦涩?大白话+类比安排上

Apache官方对Maven的定义是:一款基于项目对象模型(POM)的软件项目管理和理解工具,能通过一小段描述信息,管理项目的构建、报告和文档。

是不是看完还是一头雾水?没关系,用大白话来说:Maven就是一个"项目管家",而pom.xml文件就是它的"工作手册"。你只要在手册里写清楚项目需要什么"工具"(jar包),它就会自动去找到这些工具,不用你手动下载、导入;后续项目需要编译、测试、打包,你也只要给管家一个指令,它就会一步到位完成,不用你亲自动手。

举个简单的例子:以前你写项目,就像自己做饭,需要什么食材(jar包),就得自己去菜市场(各个网站)一个个买,买完还要自己处理(导入项目);而有了Maven,就相当于点外卖,你只要在订单(pom.xml)上写清楚要吃什么,商家(Maven仓库)就会把所有食材配齐,甚至帮你做好(完成构建),你直接享用(使用项目)就行。

2.2 为什么一定要学Maven?新手必看理由

一句话总结:省时间、少出错、提效率。对于新手来说,Maven的核心作用就两个,学会这两个,就能解决开发中80%的繁琐问题:

  1. 项目构建:相当于"管家"帮你搞定项目从"原材料"(代码)到"成品"(jar/war包)的所有流程,包括编译、测试、打包、发布,不用你反复手动操作;
  2. 依赖管理:相当于"管家"帮你管理所有项目需要的"工具"(jar包),不用你手动找、手动导,还能自动处理工具之间的关联关系。jar包下载管理工具 ,一旦是用了Maven,那么恭喜你,你的jar不需要你去自己找了,直接由Maven这个工具处理下载,其实背景大概是这样的:在进行商业开发过程中,如果你只是依靠JDK里面的类,那肯定时力不从心的,因此呢会有第三方盟友,开发了在商业开发中所缺陷的各种方方面面的类,那么这些第三方的类都是以jar包形式存在的,分散在网络世界中,对于我们使用者来说如果使用这些类就如同是逛超市一样在网络世界的海洋里找这些需要的jar包,有些jar包比较好找,因为他有自己的官方网站,但是有一些jar包他是某个个人写的,然后有一些jar你去下载的时候可能会有着风险【存在着木马等等】,后来Maven作者就将咱么Java里面的商业开发的jar包进行了收藏,然后放在了国外的一个服务器上,这个服务器我们称之为中央仓库,于是我们开发者将Maven装到自己的电脑上之后呢,那么你就通过这个Maven发请求,他就会自动帮你到国外的中央仓库里面去找到你所需要的jar包了,并将当前的jar包自动与你的项目关联,如此就省去了你自己到处乱找的麻烦了,极大的降低了我们开发人员寻找jar和使用jar包的难度了。

三、实操入门:创建第一个Maven项目

很多新手以为Maven要单独安装,其实不用!IDEA本身就集成了Maven,就像买电脑时自带了办公软件,我们直接用就行,省去了额外安装的麻烦。

这里以IDEA 2022.1.4版本为例(不同版本界面略有差异,但步骤一致),教大家快速创建Maven项目:

1.我们常规创建项目的步骤是如下所示:

打开IDEA → 点击File → 选择New → 点击Project → 直接点击Create,一个基础的Maven项目就创建完成了!


2.那么如果你通过上述的一个流程去创建我们的项目的话,它出现卡死的情况,此时我们怎么做呢?我们创建项目就用以下的方式:

1)首先呢我们选择关闭项目。

2)然后我们会看到以下的界面。

3)然后我们就通过这个界面点击new project,按照上述的流程继续创建新的项目即可。

创建完成后,你会看到项目里有一个pom.xml文件,这就是我们前面说的"管家工作手册",后续所有的配置都要在这里操作。

四、核心功能拆解:Maven的"拿手好戏"

前面我们知道了Maven的两个核心作用,接下来结合具体场景,用类比拆解细节,让大家真正理解它到底能帮我们解决什么问题。

4.1 项目构建:一键搞定"从代码到成品"

我们写好代码后,要经过"编译(把代码变成电脑能识别的文件)→ 测试(检查代码有没有bug)→ 打包(把所有文件整合在一起)→ 发布(部署到服务器)"这几个步骤,才能真正投入使用。

如果没有Maven,每次修改代码,都要手动重复这几个步骤,比如修改一行代码,就要重新编译、重新测试、重新打包,非常繁琐,而且容易出错。

而有了Maven,这一切都变得很简单:你只要给它一个指令(比如点击IDEA里的package按钮),它就会自动完成所有步骤,全程不用你干预。

我们点击maven这个按钮

在这个生命周期中,我们双击package这个按钮的时候,它会就会打包,控制台出现success就说明打包成功。

只是在我们target这个目录下就出现我们刚刚所打包的jar包。

这里重点说一下"打包":打包后会生成两种常见的文件------jar包和war包,它们就像两个不同的"收纳盒",用途不一样:

  • jar包:相当于"小型工具包",里面装的是你写好的代码,可以导入到其他项目中直接使用,比如你写了一个计算工具,打包成jar包后,其他项目只要导入这个包,就能直接用你的计算功能;
  • war包:相当于"完整的店铺",里面装的是整个web项目(比如网站),包含所有代码、页面、配置文件,通常用于部署到服务器,供别人访问。

4.2 依赖管理:再也不用手动找jar包了

依赖,其实就是项目运行所需要的"工具"(jar包)。比如我们前面学JDBC时,需要用到mysql-connector-java这个jar包,以前要手动去官网下载,然后导入项目,稍微不小心下载错版本,项目就会报错。

而用Maven,你只要在pom.xml文件里,写下这个jar包的"身份证号"(也就是依赖坐标),点击刷新,Maven就会自动去"仓库"里找到这个jar包,下载并导入项目,全程不用你手动操作。

1)首先呢我们要把那个坐标呢给写进去。

2)然后我们点右上角那个刷新按钮,将我们当前的项目给重新刷新一下,等我们的红色变成黑色,就代表下载成功,每次动这个pom.xml文件都必须要刷新才会生效。【同时呢也补充一点,它下载是从国外的中央仓库里面去下载的,然后会放在我们的本地仓库。】

最后呢再补充一个点:我们这个依赖的坐标是从哪里获取的呢?我们有一个这样的网站:https://mvnrepository.com/

然后呢选择我们需要的。

点击我们队的版本。

最后它有坐标,我们只需复制,然后添加到我们pom.xml文件中即可。

(1)依赖配置:怎么给"管家"说要什么工具?

在pom.xml文件里,有一个标签,这就是"工具清单",所有需要的jar包,都写在这个标签里。比如导入mysql-connector-java的依赖,只要写下这段代码:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
</dependencies>

这里的groupId、artifactId、version,就是jar包的"身份证号",缺一不可:

  • groupId:相当于"厂商标识",比如mysql就是这个jar包的厂商;
  • artifactId:相当于"产品名称",比如mysql-connector-java就是具体的产品;
  • version:相当于"产品版本",比如8.0.30就是具体的版本号。

配置完成后,点击IDEA右侧的"刷新"按钮,Maven就会自动下载并导入这个jar包,后续要添加新的jar包、修改版本,只要修改这段配置就行。

(2)依赖传递:不用手动找"工具的配件"

这是Maven最实用的功能之一,用一个类比就能看懂:比如你要吃火锅(项目A),需要买火锅底料(依赖B),而火锅底料需要用到辣椒(依赖C)。以前你买火锅底料时,还要手动去买辣椒;但现在你点外卖,商家会直接把火锅底料和辣椒一起送给你,不用你额外操心。

Maven的依赖传递也是一样的道理:如果项目A依赖B,B又依赖C,那么你只要在项目A里配置B的依赖,Maven就会自动把C的依赖也导入进来,不用你手动配置C。

再举个实际的例子:你开发一个Spring项目,需要导入spring-core的依赖(B),而spring-core依赖spring-jcl(C)。你只要配置spring-core的依赖,Maven就会自动把spring-jcl也下载下来,不用你知道C的存在,大大减少了你的工作量。

(3)依赖排除:不需要的"配件"可以去掉

还是用火锅的类比:你点火锅外卖时,商家默认会送香菜,但你不吃香菜(项目A不需要C依赖),这时候你可以备注"不要香菜",商家就不会送了。

Maven的依赖排除也是一样的:如果项目A依赖B,B依赖C,但项目A不需要C,你就可以在配置B的依赖时,"备注"排除C,这样Maven就不会导入C的依赖了。

比如你导入spring-core的依赖,但不需要它自带的spring-jcl依赖,就可以这样配置:

xml 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>6.0.6</version>
    <!-- 排除spring-jcl依赖 -->
    <exclusions>
        <exclusion>
            <artifactId>spring-jcl</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>
(4)依赖冲突:"管家"帮你解决"工具打架"

随着项目越来越复杂,引入的jar包越来越多,难免会出现"依赖冲突"------比如项目A依赖X(1.0版本),又依赖Y,而Y也依赖X(2.0版本),两个版本的X放在一起,就会出现"打架",导致项目报错。

这时候不用慌,Maven有自己的"解决规则":最短路径优先。比如A→Y→X(2.0)的路径,比A→X(1.0)的路径短,Maven就会自动选择X(2.0)版本,避免冲突。当然,你也可以手动指定要使用的版本,更灵活。

如果不知道冲突在哪里,可以用Maven Help 插件查看依赖关系:在IDEA里安装Maven Help插件(File→Settings→Plugins,搜索Maven Help,安装后重启IDEA),打开pom.xml文件,就能看到所有jar包的依赖关系,还能右键排除不需要的依赖,轻松解决冲突。

1)下载插件

2)点击我们的依赖分析,我们就可以看到所有jar包的依赖关系。

这里再类比一下插件:插件就像"管家的辅助工具",比如管家本身会做饭,但不会修家电,这时候就需要一个"家电维修插件"来帮他。IDEA的插件也是一样,本身功能强大,但有些特殊功能(比如查看依赖关系)需要安装插件来实现。

五、Maven仓库:"管家"去哪里找工具?

我们在pom.xml里配置好依赖后,Maven会自动去"仓库"里找jar包,这个"仓库"其实就是存储jar包、插件的文件夹,就像管家买食材的"菜市场""超市"。Maven的仓库分为三大类,用类比就能轻松区分:

5.1 本地仓库:你家里的"冰箱"

本地仓库就是你自己电脑上的一个文件夹,相当于家里的冰箱,用来存放你已经下载过的jar包。当Maven需要找某个jar包时,会先去冰箱(本地仓库)里找:

  • 如果有,就直接拿出来用(导入项目);
  • 如果没有,就去外面的超市(远程仓库)买,买回来后再放进冰箱(本地仓库),下次再用就不用再买了。

本地仓库的地址可以在IDEA里查看:File→Settings,找到Maven选项,就能看到Local repository的路径。刚开始这个文件夹是空的,随着你使用Maven的次数增多,里面的jar包会越来越多。

5.2 中央仓库:全球连锁的"大超市"

中央仓库是Maven官方维护的远程仓库,全球唯一,相当于全球连锁的大超市,里面存放着几乎所有的Java相关jar包、插件,服务于整个互联网。

中央仓库的地址是:https://repo1.maven.org/maven2/,我们也可以通过https://mvnrepository.com/这个网站,查询任意jar包的坐标,就像在超市官网查询食材的位置一样。

查询jar包坐标的步骤很简单:

  1. 打开https://mvnrepository.com/
  2. 在搜索框里输入jar包名称(比如mysql);
  3. 选择你需要的版本;
  4. 复制页面上的依赖坐标,粘贴到pom.xml里就可以了。

5.3 具体解释

maven本地仓库和中央仓库的配置

首先呢你会看到在我们设置里面,点击那个选项最多的设置,下面会有一个构建工具,构建工具里面会有一个maven选项,你点击它,此时呢你就会看到我们的本地仓库的一个位置。


1)首先呢,这里边我们不用idea自带的maven,我们使用自己去下载的maven,那这里边呢我下载的是maven3.6.1版本的【那么对于这个maven的下载大家直接去官网下载即可】,我们把他放到D盘下的maven_cof目录,当然,这些路径是你自行指定的。


2)然后呢接下来我们就去找的Maven里面的一个配置文件就是settings.xml,我们在这里配置本地仓库和中央仓库的一个位置,那么是本地仓库和中央仓库为什么需要配置?我们到时候会详细说明。

(1)找到settings.xml

(2)打开它,然后我们首先来配置本地仓库,本地仓库就是我们从中央仓库上面下载过来的那些依赖包,我们要将这些包存在我们电脑上,那存在电脑上的哪一个目录下呢?这个目录就是我们的本地仓库。

xml 复制代码
配置本地仓库的位置
<localRepository>自己指定路径</localRepository>v

(3)然后我们来配置中央仓库,首先我们往下面翻,找到我们镜像标签mirrors,然后你就粘贴下述的代码,我们将中央仓库配置为阿里云的,如果你不配置,那么我们的中央仓库是在国外的,等你去下载这些依赖包的时候,他可能会非常的慢,而且可能会中断。

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

(4)最后我们保存这个配置文件,然后我们去idea中做一个配置,将我们自己下载的maven给配置进去,啊,我们为了以后创建所有的项目都不需要手动去配置,所以呢我们这里呢做一个全局的配置,你就按照以下的选项去选。


(5)然后呢选择我们刚才下载的maven3.6.1


(6)下一步勾选override覆盖,然后选择路径,找到我们的settings.xml文件,选择完毕之后,我们的本地仓库也便自动配置好了。


最后再补充一点,如果你要配置项目的JDK,那么你就选择文件,点击项目结构,在里边就可以选择我们的JDK。


maven本地仓库和中央仓库的具体解释

正如这张图所示,我们在开发过程中,我们呢通过请求maven去给我们下载需要的jar包,首先呢maven会从我们的本地仓库中去寻找,如果有需要的jar包,那么我们就从本地仓库中给加载进来,如果本地仓库没有对应的jar包,那么此时我们就会去远在海外的中央仓库去找到这个jar包,然后把它下载过来,下载到我们的本地仓库中,然后我们再从本地仓库中给他加载到我们的JAVA程序中去,然后如果下次你还需要这个依赖包的话,你去本地仓库中找,如果找到了,那么就不用去中央仓库了,就直接从本地仓库中拿即可。


那么上述由于我们的中央仓库是在海外的,因此呢如果你去下载这个jar包的时候,可能会出现一种情况,那就是说网络会超时或者说因为某些因素会导致你无法下载这个jar包。

对于这样的一个问题呢,我们会配置一个阿里云镜像:

针对上述的一个问题,我们的阿里云镜像在我们的国内,它会从海外把你这些jar全部都给下载过来,于是如果我们本地仓库没有对应的依赖包的话,我们就会从在国内的阿里云仓库中去下载,而不用去海外,因此呢,这样我们的速度不仅会提高,而且我们的丢包率也会下降。

六、关键优化:设置国内源,下载速度翻倍

前面说过,中央仓库在国外,就像从国外买东西,物流很慢,有时候下载一个jar包要等好几分钟,甚至下载失败。这时候我们就可以把"超市"换成国内的,也就是设置国内源,最常用的就是阿里云仓库,下载速度能翻倍。

设置国内源分为两种情况:配置当前项目和配置所有新项目,下面一步步教大家操作。

6.1 配置当前项目的国内源

  1. 打开IDEA,点击File→Settings,找到Maven选项;
  2. 查看Maven配置文件(settings.xml)的路径,不同电脑的路径不一样,比如我的路径是D:\Maven.m2\settings.xml;
  3. 打开这个settings.xml文件,找到标签,在里面添加阿里云仓库的配置:
xml 复制代码
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
  1. 保存文件,重启IDEA,当前项目的国内源就配置好了。

如果你的电脑里没有settings.xml文件,直接把上面的配置(包括标签)复制到一个新建的txt文件里,然后把文件重命名为settings.xml,放到对应的路径下就行。

6.2 配置所有新项目的国内源

上面的配置只对当前项目生效,如果你新建一个项目,还需要重新配置,很麻烦。我们可以设置一下,让所有新项目都自动使用国内源:

其实很简单,只要让新项目和当前项目共用同一个settings.xml文件就行。新建项目时,在Maven配置页面,选择和当前项目一样的settings.xml路径,确认后,新项目就会自动使用国内源,不用再重复配置。

这里提醒大家一个注意点:settings.xml文件和本地仓库的路径,不要包含中文,否则会出现配置失败的情况。

七、总结:Maven新手入门核心要点

看到这里,相信老铁们已经对Maven有了清晰的认识,其实Maven并不难,核心就是"一个管家(Maven)+ 一本手册(pom.xml)+ 几个仓库(存储jar包)",记住这几点,就能轻松上手:

  1. Maven是项目管理工具,核心作用是项目构建和依赖管理,帮我们省时间、少出错;
  2. pom.xml是核心配置文件,所有依赖、插件都在这里配置;
  3. 仓库分为本地仓库、中央仓库、私服,找jar包的顺序是"本地→私服→中央";
  4. 一定要设置国内源,解决下载速度慢的问题;
  5. 新手不用死记硬背所有配置,重点掌握"依赖配置"和"项目打包",多动手实践,很快就能熟练使用。

最后提醒大家:Maven的细节虽然多,但新手不用追求一步到位,先掌握核心功能,后续在实际开发中慢慢积累,就能彻底吃透它。那本期我们就介绍到这儿,后面我们会来开发我们的springboot的程序。

相关推荐
计算机毕设指导62 小时前
基于微信小程序的智能停车场管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
码云数智-大飞2 小时前
零拷贝 IPC:用内存映射文件打造 .NET 高性能进程间通信队列
java·开发语言·网络
懈尘2 小时前
深入理解Java的HashMap扩容机制
java·开发语言·数据结构
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices
roman_日积跬步-终至千里2 小时前
【Java并发】Tomcat 与 Spring:后端项目中的线程与资源管理
java·spring·tomcat
独自破碎E2 小时前
IDEA 提示“未配置SpringBoot配置注解处理器“的解决方案
java·spring boot·intellij-idea
yqd6662 小时前
RabbitMQ用法和面试题
java·开发语言·面试
2601_949809592 小时前
flutter_for_openharmony家庭相册app实战+照片详情实现
android·java·flutter
4311媒体网2 小时前
Libvio.link 页面布局与数据分布
java·php