Maven学习-优化和重构POM
在一个复杂的项目中,项目的各个模块存在各种相互依赖关系。优化一个多模块项目的POM最好通过几步来做。总的来说,我们总是寻找一个POM中的重复或者多个兄弟POM中的重复。在多模块项目中依赖重复的模式主要包括①:一些依赖在多个模块中被生命;②有一些依赖关系是关联的,共享同样的版本③:兄弟模块依赖和兄弟模块版本的重复。Maven提供简单的机制能让你将所有的依赖重构到一个父POM。重复的依赖声明很难保证一个大项目中版本的一致性。我们可以找出所有被应用一次以上的依赖,然后将其向上移动到父POM的dependencyMangement片段。如下所示:
<?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"><modelVersion>4.0.0</modelVersion><groupId>com.netease.parent</groupId><artifactId>demo</artifactId><packaging>pom</packaging><version>1.0.3-RELEASE</version><modules><module>demo-child</module></modules><properties> <commons-logging.version>1.2</commons-logging.version><commons-io.version>2.4</commons-io.version> ...</properties><dependencyManagement><dependencies> <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>${commons-logging.version}</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency>...</dependencies></dependencyManagement> </project>
View Code
在这些依赖配置被上移后,我们需要移除子模块的依赖版本,否则会覆盖定义在父项目的依赖。如下:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency>... </dependencies>
View Code
为降低依赖重复主要使用了两种优化①:上移共同的依赖至dependencyMangement②为兄弟项目使用内置的项目version和groupId。
优化插件
dependencyMangement不适用于插件依赖管理,我们可以使用build元素下的pluginManagement来管理。
<project>...<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin>...</plugins></pluginManagement></build>... </project>
View Code
使用MVN Dependency进行优化
通过字节码分析Maven Dependency插件能够帮助发现对依赖的直接应用。mvn dependency:analyze 通过该目标分析项目,查看是否有直接依赖或者一些引用了但不是直接声明的依赖。为了进一步排查运行 mvn dependency:tree目标,该目标会列出项目中所有的直接依赖和传递性依赖。
转载于:https://www.cnblogs.com/wxgblogs/p/6663563.html
Maven学习-优化和重构POM相关推荐
- Maven实战(二)——POM重构之增还是删
重构是广大开发者再熟悉不过的技术,在Martin Fowler的<重构--改善既有代码的设计>一书中,其定义为"重构(名词):对软件内部结构的一种调整,目的是在不改变软件之可察行 ...
- Maven学习—setting.xml pom.xml 配置文件详解
一.Maven最重要的两个配置文件 Maven 仓库及相关设置配置文件 setting.xml配置文件可以设置本地仓库目录.远程仓库地址.JDK版本等等 Maven构建Java工程的pom配置文件 p ...
- Apache Maven 学习教程
Blog: https://blog.yilon.top Apache Maven 概述 Maven - 概述 Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一 ...
- Maven学习总结(八)——使用Maven构建多模块项目
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...
- Maven学习总结(一)——Maven入门
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(一)--Maven入门 一.Maven的基本概念 Maven(翻译为"专家",&quo ...
- Maven学习总结(七)——eclipse中使用Maven创建Web项目
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Pr ...
- Maven学习总结(五)——聚合与继承
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1. ...
- Maven学习总结(2)——Maven项目构建过程练习
Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建 ...
- 聚焦CSDN技术主题月:深度学习框架的重构与思考专场回顾
10月15日下午,在北京兆维大厦,由CSDN社区主办的技术主题月系列之--<深度学习框架的重构与思考>活动成功举办.CSDN邀请了用友畅捷通人工智能负责人张俊林.创业公司大数据总监周步恋. ...
最新文章
- TreeSet集合(自然排序和比较器排序)
- 解决一个坑爹的mininet的pingall失败的问题(自己编译安装openvswitch后)
- 智能实验室-杀马(Defendio) 4.16.0.840
- 详解js中typeof、instanceof与constructor
- 使用Java操作Redis(二)
- 一段代码看出JS的的解析到执行的顺序规则
- IDOC实例,消息方式的IDOC
- CentOS 7 官方yum库安装 MySQL
- 兰州大学第一届 飞马杯 体育课排队 二分 + 最大流 + 输出路径
- android cmake 打印_Android使用CMAKE编译libjpeg
- HDU 6096 AC自动机
- Postfix+Mysql+Apache+Dovecot+Thunderbird+Extmail+E
- JeDate日期控件,未选择日,出现undefined错误
- uni-app调用wifi接口
- SU插件情报局 | Vertex Tools 顶点编辑工具详解(附插件获取)
- laydate定位修改
- Java使用itextpdf实现为已有的pdf文件添加水印
- 19.猜数字的游戏:随机生成数字与输入数字进行比较
- Flink 结合 布隆过滤器(BloomFilter) 实现去重
- LiteOS学习(一)任务