在项目时用到maven管理项目,在一个就项目的基础上开发新的项目;关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己查询的问题,解决了自己的疑惑。

问题

下面是一个简略的项目结构图

Parent
`------ childA(BusinessLayer)
          `--- pom.xml

`------ childB(WebLayer)
         `--- pom.xml

`------ pom.xml

1、Parent怎么能找到childA和childB呢?

在maven中,parent模块组织好childA和childB,叫做"聚合",多个模块联合编译。实现起来很简单,只需要在parent的pom文件里加入以下内容。

<modules><module>childA</module><module>childB</module>
</modules>

2、是不是这样写就完全ok了?

这样只是告诉maven编译器,在读取parent的pom文件时去找到childA和childB,但还是会分别去编译他们引入的依赖。这样就会导致pom文件引入的包重复!!于是我们引入了"继承"的概念,也就是形成"父子"关系,子pom可以引用到父pom中引入的依赖。具体做法如下:

在parent中,写入以下内容,其中"*"标识的行可以组成一个路径,通过这个路径可以在maven仓库中找到这个pom文件!本例中,path为M2_Path/com/sang/main/Parent-Moduel/1.0.2/xxxx-1.0.2.pom。所以这三个标签是必须的!!!

<modelVersion>4.0.0</modelVersion>
<groupId>com.sang.main</groupId>              *
<artifactId>Parent-Moduel</artifactId>         *
<version>1.0.2</version>            *
<packaging>pom</packaging>
<name>Simple-main</name>

父pom写好了,子pom就通过<parent>标签继承父pom的依赖,如下:

<parent><groupId>com.sang.main</groupId><artifactId>Parent-Moduel</artifactId><version>1.0.2</version><relativePath>../pom.xml</relativePath>  <!--本例中此处是可选的-->
</parent>

值得注意的是<relativePath>标签,如果pom的层次关系就像本例中的那样只隔一层,则可以省略这个。maven同样可以找到子pom。

子pom中引入<parent>标签后,就会从父pom继承<version>等属性了,例如childA只需要再加入如下内容即可!

<modelVersion>4.0.0</modelVersion>
<groupId>com.sang.business</groupId>     <!--和artifactId一起唯一标识这个jar文件-->
<artifactId>ChildA-module</artifactId>
<packaging>jar</packaging>         <!--指明打包类型-->
<name>childA</name>

3、如何添加依赖?

maven可以让我们方便地管理jar包依赖,具体做法如下:

<dependencies><dependency>   <!--添加一个jar包依赖--><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency>
</dependencies>

如果不通过继承,则需要在每个pom中加入这样的依赖,这样子pom对应的模块可以引用到这个jar包。上面提到的重复引用jar包,可以通过下面的方式解决:

主pom中把依赖通过<dependecyManagement>引起来,表示子pom可能会用到的jar包依赖

<dependencyManagement><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency></dependencies>
</dependencyManagement>

子pom如果需要引用该jar包,则直接引用即可!不需要加入<version>,便于统一管理。此外也可以加入仅在子pom中用到的jar包,比如:

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId>   <!--此处不再需要verison了!--></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.9.4</version>    <!--当然也可以加入只在这个子模块中用到的jar包--></dependency>
</dependencies>

4、除了jar包依赖,插件也可以通过这样的方式进行管理

<!-- mainModule -->
<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.1.1</version></plugin></plugins></pluginManagement>
</build><!-- childA -->
<build>   <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId></plugin></plugins>
</build>

5、如果子pom间存在引用关系,比如childA引用到了childB的jar包,该怎么做?

<dependency><groupId>com.module</groupId><artifactId>childA</artifactId>       <!--加上childA的依赖--><version>1.0.0</version>
</dependency>

感谢:http://blog.csdn.NET/whuslei/article/details/7989102

转载于:https://www.cnblogs.com/telwanggs/p/7016561.html

maven多个子项目、父项目之间的引用问题相关推荐

  1. maven管理的子父项目打包报错

    问题描述: maven管理的子父项目中,打包项目时,报错,自己项目的依赖竟然要到远程仓库下载 报错信息:可以看到报错信息是:自己的写的 模块 在远程仓库没有找到 原因分析: 首先,我们自己的模块应该会 ...

  2. 前后端分离项目,父项目无法打包问题

    出现的问题是无法找到domain,无法找到service,无法找到符号. 这个问题困扰了我好久,尝试了很多种方法都没有解决.最后发现,是在父项目的pom中添加了打包的依赖导致的. 解决办法是删除父项目 ...

  3. maven创建父项目和子项目

    创建父级项目 new    -----    others    ------ maven project 创建好后删除,pom.xml以外的文件 点击pom.xml文件,修改Packaging属性为 ...

  4. springcloud 创建子父项目_idea搭建springCloud----搭建父子项目(二)

    今天介绍一下 : idea 搭建父子项目 父项目:springCloud_ht 子项目:eureka_server(注册中心) 1-1.新建父项目: 1-2 起名称 springCloud_ht 1- ...

  5. 子项目依赖和父项目冲突_实战 | maven 轻松重构项目

    现在是微服务盛行时代,说不准哪一天领导就会让你对一个大项目进行重构.大项目的痛点:编译慢.发布繁琐等.就像下面这张图: 真的不敢动呀,一不小心就坍塌了. 比如说我们用户系统,我们可以这么重构(这里只是 ...

  6. maven 分模块项目 主子pom之间的引入依赖关系

    在项目时用到maven管理项目,在一个就项目的基础上开发新的项目:关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己查询的问题,解决了自己的疑惑. 原文链接:https:/ ...

  7. 复制的maven项目中,子maven找不到父maven问题解决

    复制过来的maven项目子maven找不到父maven情况 首先检查我们的IDE中父maven项目下的 pom.xml 是否存在,若不存在,再检查本地文件夹中是否有该文件. 若本地就没有该pom.xm ...

  8. 多个maven project项目之间进行引用

    以如下两个maven项目为例: 1.首先明确,不属于maven module和maven peoject之间的引用,两个maven都是maven peoject工程. 2.核心是:在maven_er的 ...

  9. 关于maven pom (父项目)的maven子moudle/springboot子项目

    用idea创建maven项目自我感觉不如eclipse好用,经过摸索,终于弄懂如何在父项目(pom)创建子moudle或者是springboot类型的moudle,下面开始 1,首先创建maven p ...

最新文章

  1. Bootstrap(一):CSS--栅格系统
  2. Win64 驱动内核编程-32.枚举与删除注册表回调
  3. 【windows】CMake安装小结
  4. @Conditional进行条件判断等
  5. **PCD数据获取:Kinect+OpenNI+PCL对接(代码)
  6. 前端:后端,我要分手,你不适合我
  7. CCF201712-2 游戏(100分)【模拟】
  8. 照片浏览器_2020护考报名失败!只因照片太大瞎忙乎三小时...
  9. 电商直播还有什么新花样?
  10. 电信 宽带 光猫 中兴 F460 V6.0.0P11T2sc 破解 telecomadmin 超级密码 的方法
  11. python爬取千图网_python 爬取 花瓣网图片,千图网图片
  12. 《自然语言处理简明教程》读书笔记:第十四章 文本数据挖掘
  13. 前端性能优化的关键时间点
  14. 左神算法基础class6—题目2宽度优先遍历和深度优先遍历
  15. 联通电信校园促销加码 策略更隐蔽
  16. [转贴]郎恒《齐天大圣》Rap 搞笑!
  17. 接口获取行政区划代码_全国省市县行政区划分
  18. 中文汉字转阿拉伯数字
  19. 你所不了解的TypeScript 类型编程
  20. 目前最强性能的人脸检测算法(Wider Face Dataset)

热门文章

  1. spark sql 性能优化
  2. (102)FPGA面试题-如何选择FPGA型号?
  3. (39)VHDL实现移位寄存器(方法1)
  4. (71)FPGA模块调用(system Verilog调用VHDL)
  5. (46)System Verilog 类中变量随机激励权重分布
  6. System verilog随机系统函数$urandom使用方法
  7. php study是什么,phpstudy有什么用
  8. MRC522(1):卡片ID号的读写
  9. python图论库_Python 图论工具
  10. STM32 NVIC中断