Maven

一、Maven概述

1.介绍

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。

2.作用

(1)方便的依赖管理;

(2)统一的项目结构;

(3)标准的项目构建流程。

3.官网

http://maven.apache.org/

3.仓库

(1)本地仓库:自己计算机上的一个目录;

(2)中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/

(3)远程仓库(私服):一般由公司团队搭建的私有仓库。

4.Maven安装

(1)解压apache-maven-3.6.1-bin.zip。

(2)配置本地仓库:修改conf/settings.xml中的<localRepository>为一个指定目录。

​ <localRepository>...</localRepository>

(3)配置阿里云私服:修改conf/settings.xml中的<mirrors>标签,为其添加如下子标签:

image-20230719090011844

(4)配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量;

(5)测试:mvn -v。

二、Maven-IDEA集成

1.配置Maven环境

(1)选择IDEA中Settings->Build,Execution,Deployment->Build Tools->Maven;

(2)设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库属性。

2.IDEA创建Maven项目

(1)创建模块,选择Maven,点击Next;

(2)填写模块名称,坐标信息,点击finish,创建完成。

3.Maven坐标

(1)什么是坐标?

  • Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置;
  • 使用坐标来定义项目或引入项目中需要的依赖。

(2)Maven坐标主要组成:

  • groupld:定义当前Maven项目隶属组织名称(通常是域名反写);
  • artifactld:定义当前Maven项目名称(通常是模块名称);
  • version:定义当前项目版本号。

4.IDEA导入Maven项目

(1)方式一:打开IDEA,选择右侧Maven面板,点击+号,选中对应项目的pom.xml文件,双击。

(2)方式二:File => Project Structure => Modules => + => Import Module=>要导入工程的pom.xml=>OK。

三、依赖管理

1.依赖配置

(1)依赖:指当前项目所运行所需要的jar包,一个项目可以引入多个依赖。

(2)配置:

  • 在pom.xml中编写<dependencies>标签;
  • 在<dependencies>标签中使用<dependency>引入坐标;
  • 定义坐标的groupld,artifactld,version;
  • 点击刷新按钮,引入最新加入的坐标。

(3)注意事项:

  • 如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖;
  • 依赖的坐标信息,在https://mvnrepository.com/中搜索。

2.依赖传递

(1)依赖具有传递性:

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系;

  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

(2)排除依赖:排除依赖之主动断开依赖的资源,被排除的资源无需指定版本。

image-20230719151656939

3.依赖范围

(1)依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>...<scope>设置其作用范围。

(2)作用范围:

  • 主程序范围有效。(main文件夹范围内)
  • 测试程序范围内有效。(test文件夹范围内)
  • 是否参与打包运行。(package指令范围内)

image-20230719152107334

4.生命周期

(1)Maven的生命周期就是为了所有的maven项目构建过程进行抽象和统一。

image-20230719153136731

(2)Maven中有三套相互独立的生命周期:

  • clean:清理工作
  • default:核心工作,如:编译、测试、打包、安装、部署等。
  • site:生成报告、发布站点等。

(3)每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段

image-20230719152535258

(4)主要阶段:

  • clean:移除上一次构建生成的文件
  • compile:编译项目源代码
  • test:使用合适的单元测试框架运行测试(junit)
  • package:将编译后的文件打包,如:jar、war等
  • install:安装项目到本地仓库

(5)注意:在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。

(6)执行指定生命周期的两种方式:

  • 在IDEA中,右侧的maven工具栏,选中对应的生命周期,双击执行。
  • 在命令行中,通过命令执行。例如:mvn compile

四、分模块设计与开发

1.分模块设计:将项目按照功能分成若干个子模块。

2.作用:方便项目的管理维护,扩展,也方便模块间的相互调用,资源共享。

2.注意事项:分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行过拆分。

五、继承与聚合

1.继承关系

(1)概念:继承描述的是两个工程之间的关系,与java中的继承类似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。

(2)作用:简化依赖配置、统一管理依赖。

(3)实现:<parent> ...</parent>

(4)实现步骤:

  • 创建maven模块xxx-parent,该工程为父工程,设置打包方式pom(默认jar)。
  • 在子工程的pom.xml文件中,配置继承关系。
  • 在父工程配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。

(5)注意事项:

  • 在子工程中,配置了继承关系后,坐标中的groupID是可以省略的,因为会自动继承父工程的。
  • relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找工程)。
  • 若父子工程都配置了同一个依赖的不同版本,以子工程的为准。

2.版本锁定

(1)在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本。

(2)子工程引入依赖时,无需指定<version>版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。

(3)自定义属性/引用属性:

image-20230801091743345

(4)<dependencyManagement>与<denpendencies>区别

  • <denpendencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
  • <dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)。

3.聚合

(1)聚合:将多个模块组织成一个整体,同时进行项目的构建。

(2)聚合工程:一个不具有业务工程的“空”工程(有且仅有一个pom文件)。

(3)作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)。

(4)实现:maven中可以通过<moudules>设置当前聚合工程所包含的子模块名称。

  • 注意事项:聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。

4.继承与聚合

(1)相同点:

  • 聚合与集成的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
  • 聚合与集成均属于设计性模块,并无实际的模块内容。

(2)不同点:

  • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些。
  • 继承是在子模块中配置关系,父模块无法感知哪些子模块集成了自己。

六、私服

1.私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

2.依赖查找顺序:本地仓库、私服、中央仓库。

3.私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建)。

4.项目版本:

(1)release(发行版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的release仓库中。

(2)snapshot(快照版本):功能不稳定、尚处于开发中的版本,及快照版本,存储在私服的snapshot仓库中。

5.资源上传与下载:

image-20230801095534837

(1)设置私服的用户名和密码(setting. xml中的servers中配置):

image-20230801100100398

(2)IDEA的maven工程的pom文件中配置上传(发布)地址:

image-20230801100158655

(3)设置私服依赖下载的仓库组地址(setting.xml中的mirrors、profiles中配置):

image-20230801100253580

posted @   __YJC  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示