-
maven 公共模块依赖_Maven 依赖管理
2020-12-19 07:41:44当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。可传递性依赖发现一种相当常见的情况,比如说 A 依赖...Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
可传递性依赖发现
一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。
Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。
我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。
通过可传递性的依赖,所有被包含的库的图形会快速的增长。当有重复库时,可能出现的情形将会持续上升。Maven 提供一些功能来控制可传递的依赖的程度。
功能
功能描述
依赖调节
决定当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。 如果两个依赖版本在依赖树里的深度是一样的时候,第一个被声明的依赖将会被使用。
依赖管理
直接的指定手动创建的某个版本被使用。例如当一个工程 C 在自己的依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用的版本。
依赖范围
包含在构建过程每个阶段的依赖。
依赖排除
任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 "被排除的"。
依赖可选
任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。
依赖范围
传递依赖发现可以通过使用如下的依赖范围来得到限制:
范围
描述
编译阶段
该范围表明相关依赖是只在项目的类路径下有效。默认取值。
供应阶段
该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。
运行阶段
该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。
测试阶段
该范围表明相关依赖只在测试编译阶段和执行阶段。
系统阶段
该范围表明你需要提供一个系统路径。
导入阶段
该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。
依赖管理
通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。 接下来的一个例子可以帮助你更好的理解这个概念。
接下来是上面依赖图的详情说明:
App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。
Root 是 App-Core-lib 和 App-Data-lib 的父项目。
Root 在它的依赖部分定义了 Lib1、lib2 和 Lib3 作为依赖。
App-UI-WAR 的 pom.xml 文件代码如下:
http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0com.companyname.groupnameApp-UI-WAR1.0warcom.companyname.groupnameApp-Core-lib1.0com.companyname.groupnameApp-Data-lib1.0
App-Core-lib 的 pom.xml 文件代码如下:
http://maven.apache.org/xsd/maven-4.0.0.xsd">Rootcom.companyname.groupname1.04.0.0com.companyname.groupnameApp-Core-lib1.0jar
App-Data-lib 的 pom.xml 文件代码如下:
http://maven.apache.org/xsd/maven-4.0.0.xsd">Rootcom.companyname.groupname1.04.0.0com.companyname.groupnameApp-Data-lib1.0jar
Root 的 pom.xml 文件代码如下:
http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0com.companyname.groupnameRoot1.0pomcom.companyname.groupname1Lib11.0com.companyname.groupname2Lib22.1com.companyname.groupname3Lib31.1
现在当我们构建 App-UI-WAR 项目时, Maven 将通过遍历依赖关系图找到所有的依赖关系,并且构建该应用程序。
通过上面的例子,我们可以学习到以下关键概念:
公共的依赖可以使用 pom 父的概念被统一放在一起。App-Data-lib 和 App-Core-lib 项目的依赖在 Root 项目里列举了出来(参考 Root 的包类型,它是一个 POM).
没有必要在 App-UI-W 里声明 Lib1, lib2, Lib3 是它的依赖。 Maven 通过使用可传递的依赖机制来实现该细节。
-
Maven本地子模块互相依赖
2020-01-06 09:10:16很多时候,我们自己的项目有许多的子模块,之间互相有依赖,但是我们没有私服来发布打好的jar包. 最常见的就是本地有一个Util包, 随手写的其他项目想要引用, 却苦于没有私服. 把代码扔到同一个项目, 强迫症有忍不住. 这...很多时候,我们自己的项目有许多的子模块,之间互相有依赖,但是我们没有私服来发布打好的jar包.
最常见的就是本地有一个Util包, 随手写的其他项目想要引用, 却苦于没有私服. 把代码扔到同一个项目, 强迫症有忍不住.
这个问题Maven是有解决方案的.本质上还是打包发布,只是不再发布到远端的Maven仓库,而是打包完成之后, 将这个jar包安装到本地的maven即可.
首先,在你的
util
子模块下执行下列命令.# 打包 mvn clean package # 安装到本地mvn mvn install:install-file -Dfile=your_jar_file_path.jar -DgroupId=your_groupId -DartifactId=your_artifactId -Dversion=your_version # 检查是否安装成功 ll ~/.m2/your_groupId/your_artifactId/
之后, 在需要引入这个jar包的项目的
pom.xml
文件中,按照正常使用添加即可.<dependency> <groupId>your_groupId</groupId> <artifactId>your_artifactId</artifactId> <version>your_version</version> </dependency>
当mvn需要引入的时候,会自动从本地仓库去加载的.
完。
联系我
最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。
也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客或关注微信公众号 <呼延十 >------>呼延十
-
maven子模块灰色
2020-09-11 15:29:46 -
maven子模块之间互相引入依赖,pom文件报错
2018-12-10 11:01:10先把你添加的其他依赖全部去掉,只剩下单纯的B-A,B-C的依赖,然后先 maven install父项目,把父子关系建立起来,父项目A中要包括duimaven插件的引用,例如: <build> <plugins> ....还是比较菜
父项目是A,两个子项目是B和C,B中想引入C,会发现报错了,原因是我们install的顺序有问题
我建议:
先把你添加的其他依赖全部去掉,只剩下单纯的B-A,B-C的依赖,然后先 maven install父项目,把父子关系建立起来,父项目A中要包括duimaven插件的引用,例如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>这样的,之后你再去添加B-C这种子项目间的依赖,应该就没问题了
-
jenkins 构建 maven 子模块
2019-09-23 12:48:55Jenkins构建Maven多模块项目时,单独编译子模块 #构建super-admin-service模块 并构建 super-admin-service 相关的其他模块 -pl super-admin-service -am clean package #构建模块super-admin-service,同时... -
Maven依赖管理
2019-09-24 06:50:30管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个... -
【IDEA】建立多个子模块依赖于一个父模块(maven)
2018-05-20 12:29:33第一步,建立父模块(在IDEA中就是工程) 第二步,选中父模块(也就是工程)右键New Module建立子模块 ...其他子模块都是类似这样创建~ packaging打包类型有: jar,默认类型 war ... -
Maven 依赖管理
2019-02-19 09:49:02当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 一种相当常见的情况,比如说 A... -
maven打包时所依赖的其他模块会包含jar包吗
2019-12-23 19:44:09有个springboot工程,是多模块的,名叫demo,demo是父工程,pom类型。 demo下有两个模块,一个叫demo-api,一个叫demo-impl,demo-api是接口模块,被...对demo打包,并不会打包出demo-xxx.jar,而是对其子模块demo-... -
java 依赖管理_Runoob-Java-Maven:Maven 依赖管理
2021-03-04 08:34:49当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。可传递性依赖发现一种相当常见的情况,比如说 A 依赖... -
Maven 依赖管理改变
2019-12-20 11:05:33当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 一种相当常见的情况,比如说 A ... -
idea在克隆Maven项目时pom文件无法识别子模块,依赖导入不进来
2020-12-20 17:31:22后来发现子模块的pom文件的标识与其他子模块的pom文件的标识不一样,后发现正常下的maven项目的pom文件的标识时一个大写M,而我报错的子模块的pom文件不是一个M,也就是说pom文件就没有加载进来。 解决:右键你... -
maven 学习---Maven依赖管理
2016-04-28 20:42:00管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个... -
maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到
2018-12-19 14:17:54现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B ...)。Module A 以及Module B工程都需要依赖base工程。 ... -
maven 多模块项目依赖问题
2020-11-02 15:26:511. 模块介绍 1.1模块如下 parent 为 父级,父级下只有一个pom文件主要,其他可忽略 ...红色的代表子模块之间依赖关系 2. pom配置 2.1 parent 配置 2.1.1 配置modules 以及自身 2.1.2 配置依赖 dep... -
maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist
2020-12-10 18:09:56springboot 项目多模块已成开发大势所趋,抽出一个parent父工程,子模块基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B …)。Module A 以及Module B工程都需要依赖子模块工程。 问题: ... -
maven多模块实现以及循环依赖解决
2018-11-30 12:50:551.项目拆分为微服务 订单服务被单独拆出 负责订单的下单取消退款等等 ...最外层pom.xml中 配置公共的基础依赖jar包,其他子模块会相应引入相同的jar order-api为暴露给comsumer调用的接口,service-order为... -
项目开发中使用IDEA创建多个maven子模块
2020-08-28 23:54:15目标:在IDEA中创建多个Maven子模块 1.首先在本地新建一个空的文件夹,命名为micro-xiao...其他子模块创建与此一样,参照即可 <groupId> 就是包名称 <artifactId> 就是项目名称 <version&... -
Maven学习(十八)-----Maven依赖管理
2017-10-13 16:12:00管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个... -
maven 多模块项目如何导入其他模块的第三方 jar 包
2020-08-14 18:36:29maven 多模块开发有两点值得注意,第一,如果是 war 项目,依赖第三方 jar 可以通过 scope 为 system 的方式处理,但...但是,如果子模块过多,就会很慢,有一个快捷方法是注释掉子模块后再 install 父模块,空跑很快。 -
maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...
2021-02-01 11:16:45现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B …)。Module A 以及Module B工程都需要依赖base工程。问题... -
Maven依赖管理(Jar包之间引用)
2019-05-30 15:25:44管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个... -
maven多模块打包
2020-03-25 16:13:07子模块直接打包,如果有依赖其他模块,其他的模块必须在本地库存在, mvn install 方式安装到本地库,所以子模块打包都是使用库里的jar. 如果要使用最新的代码,方式一,父模块直接打包;方式二,把所有依赖的模块 ... -
Maven选择模块构建等命令
2020-08-30 16:04:21Maven选择模块构建 mvn install-plapollo-client 表示手动选择需要构建的项目,项目间以逗号分隔。...只构建当前项目,不构建子模块 子mudule mvn install -N PS:N是non-recursive的意思 Maven 指定... -
maven多模块项目打包(springcloud项目,依赖包外置,通用模块并入jar内)
2018-08-22 20:40:10项目应用springcloud架构,多服务划分,每个服务为一个maven子模块。项目中除架构基础服务模块外,有一个通用模块提供公用内容,其他为业务模块。由于业务模块打包后包体较大,不利于备份及上传,故需要将依赖包... -
去除maven父依赖_maven父子结构相互依赖所遇到的坑
2021-02-11 21:16:33现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B ...)。Module A 以及Module B工程都需要依赖base工程。...