先说一下概念(个人理解的,有问题请留言):

  依赖:我要盖一座房子,就需要很多的砖,这些专就是盖房子的一个依赖。我要跑一个maven项目,需要各种各样的功能,功能实现的jar包和插件就是我的依赖。

  聚合:物以类聚嘛,你想要去xx旅游,我也想去xx旅游,咱们有相同的需求完全可以一块抱团啊。聚合就是将具有相同需求的模块聚合到一块,主要是为了模块服务的,比如我一个商品服务有单独的api的jar包,有单独的service的实现包,但是都属于商品模块的,执行编译等操作的时候就不用费劲执行两遍命令了,此时就可以聚合到一块。目的是方便构建项目~

  继承:这个好理解,老子传给儿子的就是继承。不断的提取共有部分进行管理,主要解决的是重复配置的问题,通常用于声明一些公共依赖模块、属性等。

依赖:

   依赖主要包含:依赖范围、传递性依赖、依赖优先级、依赖类型、可选依赖、排除依赖等,下面用带有注释的xml配置来描述。(注:此例非人类配置仅为说明各个属性的作用,未满18周岁同学请在父母陪同下观看)

  1. <!-- 属性定义,类似于常量 -->
  2. <properties>
  3. <property.key>property.value</property.key>
  4. <!-- 归类依赖,这里例子举的不是很恰当。试想用定义了spring的某个版本,下面依赖的<version>全用变量就可以统一管理 -->
  5. <junit.version>3.8.</junit.version>
  6. </properties>
  7. <!-- 依赖管理,可以依赖内部模块、也可以依赖三方jar包 -->
  8. <!-- 依赖命令:
  9. 依赖树:dependency:tree
  10. 依赖列表:dependency:list
  11. 依赖分析:dependency:analyze
  12. -->
  13. <dependencies>
  14. <!-- 依赖 -->
  15. <dependency>
  16. <groupId>junit</groupId>
  17. <artifactId>junit</artifactId>
  18. <version>${junit.version}</version>
  19. <!-- 组件的附属构件,不能在定义pom的时候直接指定,此值由插件生成,比如java-doc等,依赖的时候要指明
  20. <classifier></classifier> -->
  21. <!--
  22. 依赖范围:
  23. compile(默认):编译、测试、运行都有效,spring-core
  24. test:测试,junit
  25. provided:编译、测试,servlet-api
  26. runtime:测试、运行,jdbc驱动
  27. system:系统
  28. import:与dependencyManagement同时使用
  29. 传递性依赖:
  30. A - B - sb.jar
  31. 此时A传递引用sb.jar
  32. 依赖优先级:
  33. .第一原则,路径最近依赖原则
  34. A - B - sb.jar
  35. A - sb.jar (√)
  36. .第二原则,最先声明依赖原则
  37. A - B - sb.jar (√)
  38. A - C - sb.jar
  39. -->
  40. <scope>test</scope>
  41. <!-- 类型,一般不用显示声明,默认为jar -->
  42. <type>jar</type>
  43. <!-- 可选依赖,不会被传递 -->
  44. <optional>true</optional>
  45. <!-- 排除依赖,比如排除掉某个不想要的包
  46. <exclusions>
  47. <exclusion>
  48. <groupId>com.wang</groupId>
  49. <artifactId>test123</artifactId>
  50. </exclusion>
  51. </exclusions>-->
  52. <!-- 引入比较特殊的jar包的时候才会使用到,通常是相同版本在不同环境下使用的jar,比如jar的名字json-lib-2.4-jdk15.jar -->
  53. <!-- <classifier>jdk15</classifier> -->
  54. <!-- 仅供系统范围使用,不鼓励使用这个元素,设置为系统的绝对路径,可以使用系统变量如${Java.home},要求<scope>元素的值为system
  55. <systemPath>D:\test123.jar</systemPath>-->
  56. </dependency>
  57. </dependencies>

聚合:

  表现为pom.xml中的<modules>元素,注意module的配置是相对于父pom的,如:

  1. <!-- 目录结构
      parent
        父pom.xml
      account-email
        pom.xml
      account-persist
        pom.xml -->
  1. <!-- 配置 -->
    <modules>
      <module>../account-email</module>
      <module>../account-persist</module>
    </modules>
  1. <!-- 目录结构
  2.   父pom.xml
  3.   account-email
  4.     pom.xml
  5.   account-persist
  6.     pom.xml -->
  7.  
  8. <!-- 配置 -->
  9. <modules>
  10. <module>account-email</module>
  11. <module>account-persist</module>
  12. </modules>

继承:

  表现为pom.xml的<parent>元素,子pom可以继承父pom中的配置,如依赖、属性等。

  父模块只能打包为pom。

  可以继承的元素:groupId、version、description、organization、inceptionYear、url、developers、contributors、distributinManagement、issueManagement、ciManagement、scm、mailingLists、properties、dependencies、dependencyManagement、repositories、build、reporting

  感觉上面大多数都是一些扯蛋的元素,比较常用的有以下几个:

  properties:属性,类似于java的静态常量

  dependencies:依赖

  distributionManagement:部署配置,比如自定义组件的上传,会结合settings.xml里的server进行账号认证。

依赖管理(不会实际引入依赖):

  <dependencyManagement>元素,子模块引入时可以省略版本号的配置

  依赖管理scope元素可以设置为import,这个import必须结合dependencyManagement来使用。使用import通常指向一个pom文件,作用是将目标pom中的dependencyManagement配置导入合并到当前pom的dependencyManagement元素中使用。

插件管理(不会实际引入依赖):

  <pluginManagement>,只需引入插件的坐标即可,省去插件的具体配置,便于管理和维护~

  

maven学习(六)依赖、聚合、继承的更多相关文章

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

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(五)——聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <mod ...

  2. Maven学习(八)继承和聚合

    *聚合(多模块) 在一个项目中 往往有多个模块组成,例如有项目demo下面有a, b两个模块 为了能使用一条命令就能构建demo-a, demo-b两个模块, 需要创建一个额外的聚合模块, 然后通过该 ...

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

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  4. 转】Maven学习总结(五)——聚合与继承

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4058008.html 感谢! 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1. ...

  5. Maven学习小结(四 聚合与继承)

    1.聚合 一次构建多个项目模块. 2.继承 为了消除重复,把很多相同的配置提取出来,例如groupid和version: 2.1 Maven中可以继承的POM元素 groupId :项目组 ID ,项 ...

  6. maven学习笔记四(聚合和继承)

    聚合 现在假如,我创建了3个maven项目, user-core.2.user-log,3.user-service 这个时候,假如我们要打包这些项目,要一个一个来,会很麻烦.那么我们有没有更好的办法 ...

  7. Maven学习5-聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...

  8. Maven学习 六 pom.xml文件

    java jar包的搜索网址:http://mvnrepository.com/ pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需 ...

  9. Maven学习(六)-----Maven仓库的详细介绍

    Maven仓库的详细介绍 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依 ...

  10. Maven学习 (六) 搭建多模块企业级项目

    首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...

随机推荐

  1. this和target目标对象的区别

    在事件函数中 event.target和this是一样的效果吗? this是调用方法的对象, evemt.target事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. ...

  2. vue中实现国际化--语言切换(转载)

    https://segmentfault.com/a/1190000011800593

  3. myEclipse修改字体大小

  4. ActivityManager的代理模式

    从官方文档的介绍可以看到ActivityManager的作用: 是与系统所有正在运行着的Acitivity进行交互,对系统所有运行中的Activity相关信息(Task,Memory,Service, ...

  5. python在读取配置文件存入列表中,去掉回车符号

    self.receiver = map(lambda x: x.strip(), receiver_list) # 去掉list中的回车符号

  6. oracle 表空间tablespace

    一.Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在的,把多个DataFile合并到一起就是 ...

  7. Git学习系列之 Git 、CVS、SVN的比较

    Git .CVS.SVN比较 项目源代码的版本管理工具中,比较常用的主要有:CVS.SVN.Git 和 Mercurial  (其中,关于SVN,请参见我的博客:SVN学习系列) 目前Google C ...

  8. js中的闭包理解一

    闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的 ...

  9. 关于javascript中时间格式和时间戳的转换

    当前时间获取的各种函数: var myDate = new Date();myDate.getYear();        //获取当前年份(2位),已经不推荐使用myDate.getFullYear ...

  10. OSI与TCP/IP协议区别

    1 OSI参考模型 谈到网络不能不谈OSI参考模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,也为我们学习网络协议提供了一个很好的参考.在现实网络世界里,T ...