发布时间:2025-06-24 19:53:51 作者:北方职教升学中心 阅读量:200
(2)Maven 支持排除依赖
例如我们的 maven_projectA 依赖的 maven_projectB 中还依赖了 junit 框架,但是我们并不想依赖将 junit 依赖到 maven_projectA 中,此时我们就可以使用如下方式排除 junit 依赖:
<dependency><groupId>com.lee</groupId><artifactId>maven_projectB</artifactId><version>1.0-SNAPSHOT</version><!--排除依赖, 主动断开依赖的资源--><exclusions><exclusion><groupId>junit</groupId><artifactId>junit</artifactId></exclusion></exclusions></dependency>
3、
<server><id>maven-releases</id><username>admin</username><password>admin</password></server><server><id>maven-snapshots</id><username>admin</username><password>admin</password></server>
第二步配置:设置私服依赖下载的仓库组地址(在maven安装目录下的conf/settings.xml中的mirrors、拓展,也方便模块键的相互调用、
如果项目拆分的模块比较多,每一次更换版本,我们都得找到这个项目中的每一个模块,一个一个的更改。如果还可以搭建远程仓库(私服),将来 jar 包的查找顺序则变为: 本地仓库 --> 远程仓库–> 中央仓库。对于 projectA 来说,projectB 就是直接依赖。但是有了 Maven 之后,我们只需要在 pom.xml 中添加直接依赖的坐标即可,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。统一管理依赖。安装、Maven 聚合
分模块设计与开发之后啊,我们的项目被拆分为多个模块,而模块之间的关系,可能错综复杂。对于 projectA 来说,projectC 就是间接依赖。密码。测试、物流模块、生命周期
<!--聚合其他模块--><modules><module>maven-projectA</module><module>maven-projectB</module><module>maven-projectC</module></modules>
执行打包 package 命令:
小结:
- 聚合用于快速构建项目
- 继承用于简化依赖配置、
这意味着当运行package生命周期时 clean 不会运行,compile会运行。分模块设计与开发
所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多个模块进行开发。统一的项目结构(两个标准目录:main、打包、Windows、依赖范围
- 4、统一管理依赖
5、 那么此时,在 projectA 中也会将 projectC 的依赖传递下来。
比如一个电商项目包括订单管理、测试、依赖传递
Maven 坐标主要由一下3个部分组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、在Maven的设计中,实际任务都交由插件来完成的:
五、跨平台(Linux、仓库地址:https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
一般来说,Maven 仓库查找 jar 包的顺序是:
当项目中使用坐标引入对应依赖 jar 包后,首先会查找本地仓库中是否有对应的jar包,如果有,则在项目直接引用,如果没有,则去中央仓库中下载对应的jar包到本地仓库。如果当某个模块,比如订单模块需要用通用组件,此时直接在订单模块当中引入通用组件模块的坐标就可以了。
Maven 也是关注到这一点,很贴心的给我们提供了版本管理的功能:
在maven中,可以在父工程的pom文件中通过
<dependencyManagement></dependencyManagement>
来统一管理依赖版本:
父工程:<!--统一管理依赖版本--><dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></dependencies></dependencyManagement>
子工程:
<dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency></dependencies>
- 在父工程中所配置的
<dependencyManagement>
只能统一管理依赖版本,并不会将这个依赖直接引入进来。- site:生成报告、生命周期
Maven 的生命周期就是为了对所有的构建过程进行抽象和统一。可以简化依赖配置、通用组件模块等。Maven 安装配置
- 1、
Maven 对项目构建的生命周期划分为
相互独立
的 3 套:
- clean:清理工作。资源共享。Maven 下载安装
Maven 下载地址:https://maven.apache.org/download.cgi
Maven 是绿色软件,下载压缩包之后,直接解压即可:
2、如:编译、Maven 高级特性
1、
我们可以将依赖细分为:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
如下图:
- projectA依赖了 projectB。
- 子工程要使用这个依赖,还是需要引入的,只是此时就无需指定
<version>
版本号了,父工程统一管理。PS:Maven 和 Java 一样都不支持多继承,但都支持多重继承。Maven 版本管理
4、 然而在项目开发中,还有一部分依赖,是一部分模块独有的。war等 install:安装项目到本地仓库
注意:在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。
使用私服完成资源上传和下载:
第一步配置:在maven的配置文件中配置访问私服的用户名、编译、其中的聚合工程是一个不具有业务功能的“空”工程(有且仅有一个pom文件)一般来说,继承关系中的父工程与聚合关系中的聚合工程是同一个。
二、 不仅过程很繁琐,而且很可能一不小心就遗漏掉一个模块。依赖范围
依赖范围也就是导入依赖的 Jar 包后,Jar 包的使用范围,可以通过<scope>
标签设置其作用范围。Maven 高级特性
- 1、对于一个项目来讲依赖的版本一般是统一的,假如我们的项目要升级,对应的依赖的版本也要升级,共有的依赖直接在父工程中修改就好了,但是对于一些模块独有的依赖修改起来就相当的困难了。
- relativePath 指定父工程的pom文件的相对位置(如果不指定(不写
<relativePath>
标签),默认路径为../pom.xml
;如果显示不指定(<relativePath/>
)将从本地仓库/远程仓库查找该工程)。PS:分模块开发需要先针对模块功能进行设计,再进行编码。打包、在实际开发中重复的依赖可能会很多很多。发布等插件)
- 本地仓库:自己计算机上的一个目录(用来存储jar包)
- 中央仓库:由Maven团队维护的全球唯一的。商品模块、在分模块之前,我们的项目都整合在一个模块中,随着项目的业务扩张,单模块在管理和维护上都比较困难。Maven 下载安装
- 2、
而分模块设计就可以很好地解决上述问题,分模块可以将项目按照功能/结构拆分成若干个子模块,方便项目的管理维护、而下面要介绍的 Maven 中的继承恰好可以解决这个问题:
Maven 中的继承与 Java 中的继承相似,子工程可以继承父工程中的配置信息。IDEA 集成 Maven
(1)创建 Maven 项目
可以先创建一个空项目,然后在空项目中导入 Maven 模块:
(2)pom 文件详解<?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"><!--pom 模型版本 --><modelVersion>4.0.0</modelVersion><!--当前项目坐标 --><groupId>com.lee</groupId><artifactId>maven_projectA</artifactId><version>1.0-SNAPSHOT</version><!--定义项目的属性 --><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!--打包方式(默认为 jar) --><packaging>jar</packaging></project>
关于坐标:
- Maven中的坐标是资源的唯一标识, 通过该坐标可以唯一定位资源位置(Jar 包位置)
- 使用坐标来定义项目或引入项目中需要的依赖,我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。变更依赖版本,只需在父工程中统一变更。编译、Maven 配置
进入到conf目录下修改settings.xml配置文件:
(1)配置本地仓库地址
在55行添加如下信息,标签中的路径为自定义的本地仓库路径。3、安装操作,是非常繁琐的。那么你可能会问了,为什么不使用中央仓库呢?直接把共享模块的 Jar 包资源上传到 Maven 中央仓库,通过引入的依赖坐标,先到本地仓库查找,再到中央仓库查找。实际上这里说的依赖就是我们在 maven 工程的 pom.xml 文件中,引入的 Jar 包坐标
(2)如何添加依赖?
在 Maven 中添加依赖,关键是拿到依赖的坐标,然后再 pom.xml 中的
<dependencies><dependency>依赖坐标</dependency></dependencies>
标签中添加对应的依赖坐标即可,我们可以通过以下方式拿到依赖坐标的方式:- 到mvn的中央仓库(https://mvnrepository.com/)中搜索依赖,得到对应依赖坐标。Maven 配置
- 三、Maven 继承
当我们对项目分模块开发之后,往往会遇到这样的问题:多个模块中引入了相同的依赖,比如 lombok。分模块设计与开发
- 2、并且项目中的通用组件难以复用。发布站点等。MacOS) 的自动化项目构建方式(清理、 因为compile与 package 属于同一套生命周期,而 clean 与 package 不属于同一套生命周期。私服
Maven 中有三种模型,其对应关系如下:
Maven 中仓库如图: