Maven的聚合(多模块)和Parent继承

 更新时间:2018年12月25日 15:32:21   作者:isea533  
今天小编就为大家分享一篇关于Maven的聚合(多模块)和Parent继承,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

即使是长期从事 Maven 工作的开发人员也不能完全掌握聚合(多模块)和 Parent 继承的关系,在使用多模块时,子模块总要指定聚合的 pom 为 <parent>。由于在大多数示例中都是这么写的,所以很难让人搞懂这两者的具体作用和关系。

实际上在 Maven 中聚合(多模块)和继承是两回事,两者不存在直接联系。

pom文档地址:https://maven.apache.org/pom.html
Maven 完全参考:http://books.sonatype.com/mvnref-book/reference/index.html

继承

继承是 Maven 中很强大的一种功能,继承可以使得子POM可以获得 parent 中的各项配置,可以对子pom进行统一的配置和依赖管理。父POM中的大多数元素都能被子POM继承,这些元素包含:

  • groupId
  • version
  • description
  • url
  • inceptionYear
  • organization
  • licenses
  • developers
  • contributors
  • mailingLists
  • scm
  • issueManagement
  • ciManagement
  • properties
  • dependencyManagement
  • dependencies
  • repositories
  • pluginRepositories
  • build
  • plugin executions with matching ids
  • plugin configuration
  • etc.
  • reporting
  • profiles

注意下面的元素,这些都是不能被继承的。

  • artifactId
  • name
  • prerequisites

想要添加 parent,只需要像下面这样写。

<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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <relativePath>../my-parent</relativePath>
 </parent>
 <artifactId>my-project</artifactId>
</project>

其中relativePath元素不是必须的,指定后会优先从指定的位置查找父pom。

聚合(或多模块)

具有模块的项目被称为多模块或聚合项目。模块是此POM列出并作为一组执行的项目。通过一个pom打包的项目可以将它们列为模块来聚合成一组项目进行构建,这些模块名是这些项目的相对目录。

<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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>my-parent</artifactId>
 <version>2.0</version>
 <packaging>pom</packaging>
 <modules>
  <module>my-project</module>
  <module>another-project</module>
 </modules>
</project>

在列出模块时,不需要自己考虑模块间依赖关系,即POM给出的模块排序并不重要。Maven将对模块进行拓扑排序,使得依赖关系始终在依赖模块之前构建。

聚合 VS 父POM

虽然聚合通常伴随着父POM的继承关系,但是这两者不是必须同时存在的,从上面两者的介绍可以看出来,这两者的都有不同的作用,他们的作用不依赖于另一个的配置。

父POM是为了抽取统一的配置信息和依赖版本控制,方便子POM直接引用,简化子POM的配置。聚合(多模块)则是为了方便一组项目进行统一的操作而作为一个大的整体,所以要真正根据这两者不同的作用来使用,不必为了聚合而继承同一个父POM,也不比为了继承父POM而设计成多模块。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 使用Mybatis实现分页效果示例

    使用Mybatis实现分页效果示例

    大家好,本篇文章主要讲的是使用Mybatis实现分页效果示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Spark Streaming算子开发实例

    Spark Streaming算子开发实例

    这篇文章主要介绍了Spark Streaming算子开发实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • java实现的简单猜数字游戏代码

    java实现的简单猜数字游戏代码

    这篇文章主要介绍了java实现的简单猜数字游戏代码,通过随机数与逻辑判断来实现游戏功能,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • SpringBoot集成内存数据库Sqlite的实践

    SpringBoot集成内存数据库Sqlite的实践

    sqlite这样的内存数据库,小巧可爱,做小型服务端演示程序,非常好用,本文主要介绍了SpringBoot集成Sqlite,具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • java交换排序之奇偶排序实现方法

    java交换排序之奇偶排序实现方法

    这篇文章主要介绍了java交换排序之奇偶排序实现方法,实例分析了奇偶排序的原理与具体实现技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • IDEA 中 maven 的 Lifecycle 和Plugins 的区别

    IDEA 中 maven 的 Lifecycle 和Plugins&n

    IDEA 主界面右侧 Maven 标签栏有同样的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在,到底选哪个?二者又有什么区别呢?下面小编给大家介绍下IDEA 中 maven 的 Lifecycle 和Plugins 的区别,感兴趣的朋友一起看看吧
    2023-03-03
  • jasypt SaltGenerator接口定义方法源码解读

    jasypt SaltGenerator接口定义方法源码解读

    这篇文章主要为大家介绍了jasypt SaltGenerator接口定义方法源码解读,,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • springboot实现拦截器的3种方式及异步执行的思考

    springboot实现拦截器的3种方式及异步执行的思考

    实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等。本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异。感兴趣的可以了解一下
    2021-07-07
  • 浅析JAVA中的内存结构、重载、this与继承

    浅析JAVA中的内存结构、重载、this与继承

    这篇文章主要介绍了 JAVA中的内存结构、重载、this与继承的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java编程经典案例之基于斐波那契数列解决兔子问题实例

    java编程经典案例之基于斐波那契数列解决兔子问题实例

    这篇文章主要介绍了java编程经典案例之基于斐波那契数列解决兔子问题,结合完整实例形式分析了斐波那契数列的原理及java解决兔子问题的相关操作技巧,需要的朋友可以参考下
    2017-10-10

最新评论