-
maven项目中父项目dependencyManagement和子项目dependencies的关系
2020-08-11 18:55:45当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。 由于我们的模块很多,所以...1、DepencyManagement应用场景
当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。由于我们的模块很多,所以我们又抽象了一层,抽出一个itoo-base-parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。 在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
来看看我们项目中的应用:
pom继承关系图:
父项目的dependencyManagement
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>${org.eclipse.persistence.jpa.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> </dependencies> </dependencyManagement>
子项目:dependencies
<!--继承父类--> <parent> <artifactId>itoo-base-parent</artifactId> <groupId>com.tgb</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../itoo-base-parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>itoo-base</artifactId> <packaging>ejb</packaging> <!--依赖关系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <scope>provided</scope> </dependency> </dependencies> </project>
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
2、Dependencies
相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承3、区别
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。4、Maven约定优于配置
它提出这一概念,为项目提供合理的默认行为,无需不必要的配置。提供了默认的目录
src ——> 源代码和测试代码的根目录main 应用代码的源目录
java 源代码
resources 项目的资源文件
test 测试代码的源目录
java 测试代码
resources 测试的资源文件
target 编译后的类文件、jar文件等
对于Maven约定优于配置的理解,一方面对于小型项目基本满足我们的需要基本不需要自己配置东西,使用Maven已经配置好的,快速上手,学习成本降低;另一方面,对于不满足我们需要的还可以自定义设置,体现了灵活性。配置大量减少了,随着项目变的越复杂,这种优势就越明显。 -
Eclipse-maven-聚合项目
2020-06-10 11:19:59文章目录前言聚合继承整体架构依赖关系构建父模块 前言 历史笔记,由 @为知笔记 中好几年前编写,后整理放到csdn中 聚合 项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起...前言
- 历史笔记,由 @为知笔记 中好几年前编写,后整理放到csdn中
聚合
- 项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,
- 比如:dao、service、web三个工程最终会打一个独立的war运行。而dao和service 通过jar包的方式配置到web中
继承
- 继承 – > 在父工程中,需要设置管理依赖版本
- 继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复。
- 比如:设置编译版本、锁定spring的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。
整体结构
- 图解
依赖关系
-
项目依赖关系,不一定非要这么干,这个只是历史经验
model-model:存放实体类
manager-mapper:主要用来写对数据库的增删改查的
manager-utils:写一些工具类,比如金额的验证,数据格式化加个小数点
manager-service:用来封装mapper的,把它写成服务
manager-biz:主要是用来对manager-service的服务做进一步抽象的(一般不需要)manager-facade:主要是用来写接口给外部系统调用的(一般不需要)
manager-integration:用来写调用别的系统的接口的(一般不需要)
manager-web:主要用来写页面的
构建父模块
- 创建一个parent父工程将通用的pom配置抽取出来聚合:聚合多个模块运行。
- 在父工程的pom.xml中抽取一些重复的配置的
- 比如:锁定jar包的版本、设置编译版本、插件等
创建项目
- 选择
maven project
选择一个简单的结构
填写配置信息
- 填写pacjaging:类型为
pom
构建子模块
- 子模块的构建流程都是一模一样’’
构建项目
- 这里选择为
Maven Module
选择父类工程
配置模块信息
- 这里在选择版本边编写的时候 如果是 jar 就 0.0.1 如果是war 就1.0.0
-
MAVEN
2020-09-18 16:40:03这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样...MAVEN
1.dependencyManagement
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
2.dependencies
相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
3.区别
-
dependencies
即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) -
dependencyManagement
只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的版本。
作者:angeChen
链接:https://www.jianshu.com/p/afba8648a531
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 -
-
maven多模块之间的依赖关系
2018-05-11 15:12:42Guns项目改项目名和包名出错:1、JDK版本,maven默认使用1.52、模块之间的依赖关系,即<dependency>,里边的<groupId>、<artifactId>问题:模块改名,parent模块中pom修改...Guns项目改项目名和包名出错:
1、JDK版本,maven默认使用1.5
2、模块之间的依赖关系,即<dependency>,里边的<groupId>、<artifactId>
问题:模块改名,parent模块中pom修改<module>,但是出错,clean和install不能解决
3、修改了子模块对父模块引用<relativePath>出错
4、修改了父模块的groupId和artifactId,name---->是否可以直接修改groupId
5、更换了包名,需要注意类里面import的包路径,模块admin和模块core里面的代码有些包名相同,注意
6、换包名,注意重复的import
7、出现不明错误
8、
-
Maven理解
2020-04-26 21:36:17Maven概念流程目录关键字Maven的坐标和仓库位置的关系修改默认JDK版本生命周期父工程聚合详细教程 概念 Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理 网址:Maven... -
Maven学习-优化和重构POM
2017-04-03 20:31:00在一个复杂的项目中,项目的各个模块存在各种相互依赖关系。优化一个多模块项目的POM最好通过几步来做。总的来说,我们总是寻找一个...Maven提供简单的机制能让你将所有的依赖重构到一个父POM。重复的依赖声明很难保... -
Maven中可选依赖(optional)和依赖排除(exclusion)的用法
2019-03-06 21:11:28Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。 Exclusions则是主动排除子项目传递过来的依赖。 假如有三个项目分别为A项目、B项目、C项目,依赖... -
9.1.从零开始学springboot-maven聚合下的pom依赖关系
2019-03-14 11:20:35创建多模块项目时,相信有部分同学对父模块个子模块的pom文件产生了疑问,子模块是否能自动继承父模块的依赖。这就得讲到dependencyManagement和dependencies的区别了 关于dependencyManagement和dependencies的... -
Maven依赖机制-参考官方文档
2020-08-11 08:57:04也就是说,Maven会根据你引入 pom 的依赖来自动管理各依赖之间的关系,而它们有可能是继承自父项目或者它本身。因此可能会有多个不同版本的同一依赖,然而只有在发生循环依赖的时候才会产生问题。 Maven 自身包含... -
maven中dependencyManagement作用
2020-02-18 20:59:20注: 用在父项目中管理依赖包的版本,但不实际引入。 用于子项目继承。 备注:今天有好些实习的同事问到Maven中关于dependencyManagement和普通dependencies的区别,说多了,麻烦,记录一下、 在Maven多模块的时候... -
t淘淘商城项目 商城项目 视频和源码教程 详细
2018-08-13 13:39:07除了项目构建,Maven最核心的功能是软件包的依赖管理,能够自动分析项目所需要的依赖软件包,并到Maven中心仓库去下载。 A)管理依赖的jar包 B)管理工程之间的依赖关系。 3.2. Maven本地仓库 在当前系统用户的... -
SpringCloud-狂神(2. REST服务环境搭建)学习笔记
2020-09-28 18:53:00上一篇 : 1. 概述 文章目录1. SpringBoot 和 SpringCloud 版本关系2....创建一个 Maven 项目作为父项目 删除父项目中的 src 目录(用不上) 修改父项目的 POM 文件,导入依赖 <!--修改打包方式为 pom--> -
模拟springcloud服务集群,使用ribbon和feign实现负载均衡。
2020-08-21 18:12:521.创建一个空的maven工程,作为整个集群的父工程。导入项目所需要的一些依赖。如:springboot,springcloud依赖,springboot启动器,mysql数据库,日志相关的log4j,logback等。 主要问题:注意springboot,spring... -
企业中的ng:在企业界如何运行Angular的示例-源码
2021-02-04 02:30:12企业中的角 企业...多模块...企业...大...不小... maven maven maven ... enterpre级生成工具...... 依赖关系已安装到用户计算机上的本地Maven存储库中。 在节点和与节点相关的程序包管理(无论是npm,yarn还是pnp -
pom - project object model
2017-04-05 14:10:00POM包含了四类描述和配置: 项目总体信息 它包含了一个项目的名称、项目的URL、发起的...它会依赖于其它项目,可能从父项目继承POM设置。 POM语法 项目版本 <major version>.<mi... -
pom.xml简介
2016-07-17 16:01:101.概念 Project Object Model,项目对象模型,通过xml格式描述程序之间的依赖和程序...基础配置<modelVersion>4.0.0描述maven版本信息,现在唯一支持maven2、maven3的版本<parent></parent>父节点,描述继承关系,如果 -
分布式学习平台之搭建springcloud分布式工程(1)
2019-01-13 21:12:34springcloud和springboot的依赖包存在版本对应关系,所以选择springcloud版本时请查看springcloud官网。 注:把项目作为父工程,把packing改为pom。 <?xml version="1.0" ... -
Java_聚合工程_POM
2019-03-03 15:09:16Maven工程的拆分和聚合 (1)定义父工程,集中管理依赖版本,模块基于父工程进行创建; (2)模块拆分的越细,可重用越高,避免重复代码; (3)模块之间需要通过依赖来建立关系; (4)三层结构(dao:取数据;... -
spring security 参考手册中文版
2018-02-01 17:05:182.4.3项目模块 25 核心 - spring-security-core.jar 25 远程处理 - spring-security-remoting.jar 25 Web - spring-security-web.jar 25 配置 - spring-security-config.jar 26 LDAP - spring-security-ldap.jar 26 ... -
如果你的 hera 使用的是 2.4.1 版本以上的,使用maven执行 mvn clean package -Dmaven.test.skip=true -Pdev 打包后在根目录会出现如图所示的压缩包 你可以通过 ssh 把该包上传到服务器,解压该tar.gz包。然后修改 ...
-
项目构建:jdk1.8、Maven 3 持久层框架:Mybatis 模板框架:Thymeleaf 分页插件:PageHelper 加密:MD5加密 运行环境:腾讯云Centos7 3.数据库 MySQL 5.7 二、功能需求 因为是个人博客,所以没有做用户权限管理...
-
本工程包含了 SpringAOP,死锁,JUC同步锁,读-写同步锁,ThreadLocal使用,JUC线程池和Spring提供的线程池,jdk 1.8 中的日期时间API,数据结构中 图的实现及操作和广度优先遍历/深度优先遍历(其他待完善),生成XML...