在一个复杂的项目中,项目的各个模块存在各种相互依赖关系。优化一个多模块项目的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相关推荐

  1. Maven实战(二)——POM重构之增还是删

    重构是广大开发者再熟悉不过的技术,在Martin Fowler的<重构--改善既有代码的设计>一书中,其定义为"重构(名词):对软件内部结构的一种调整,目的是在不改变软件之可察行 ...

  2. Maven学习—setting.xml pom.xml 配置文件详解

    一.Maven最重要的两个配置文件 Maven 仓库及相关设置配置文件 setting.xml配置文件可以设置本地仓库目录.远程仓库地址.JDK版本等等 Maven构建Java工程的pom配置文件 p ...

  3. Apache Maven 学习教程

    Blog: https://blog.yilon.top Apache Maven 概述 Maven - 概述 Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一 ...

  4. Maven学习总结(八)——使用Maven构建多模块项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

  5. Maven学习总结(一)——Maven入门

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(一)--Maven入门 一.Maven的基本概念 Maven(翻译为"专家",&quo ...

  6. Maven学习总结(七)——eclipse中使用Maven创建Web项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Pr ...

  7. Maven学习总结(五)——聚合与继承

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1. ...

  8. Maven学习总结(2)——Maven项目构建过程练习

    Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建 ...

  9. 聚焦CSDN技术主题月:深度学习框架的重构与思考专场回顾

    10月15日下午,在北京兆维大厦,由CSDN社区主办的技术主题月系列之--<深度学习框架的重构与思考>活动成功举办.CSDN邀请了用友畅捷通人工智能负责人张俊林.创业公司大数据总监周步恋. ...

最新文章

  1. TreeSet集合(自然排序和比较器排序)
  2. 解决一个坑爹的mininet的pingall失败的问题(自己编译安装openvswitch后)
  3. 智能实验室-杀马(Defendio) 4.16.0.840
  4. 详解js中typeof、instanceof与constructor
  5. 使用Java操作Redis(二)
  6. 一段代码看出JS的的解析到执行的顺序规则
  7. IDOC实例,消息方式的IDOC
  8. CentOS 7 官方yum库安装 MySQL
  9. 兰州大学第一届 飞马杯 体育课排队 二分 + 最大流 + 输出路径
  10. android cmake 打印_Android使用CMAKE编译libjpeg
  11. HDU 6096 AC自动机
  12. Postfix+Mysql+Apache+Dovecot+Thunderbird+Extmail+E
  13. JeDate日期控件,未选择日,出现undefined错误
  14. uni-app调用wifi接口
  15. SU插件情报局 | Vertex Tools 顶点编辑工具详解(附插件获取)
  16. laydate定位修改
  17. Java使用itextpdf实现为已有的pdf文件添加水印
  18. 19.猜数字的游戏:随机生成数字与输入数字进行比较
  19. Flink 结合 布隆过滤器(BloomFilter) 实现去重
  20. LiteOS学习(一)任务

热门文章

  1. Linux 下如何处理包含空格和特殊字符的文件名
  2. iOS开发23:通过归档永久存储数据
  3. 20/100. House Robber
  4. 机器学习博主推荐、博文推荐
  5. [leveldb] 3.put/delete操作
  6. 我的学习之路_第二章_接口/多态
  7. 2016总结 wjwdive
  8. TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
  9. VBA与Excel内置的函数
  10. 操作html标签之找到标签(续)