maven多个子项目、父项目之间的引用问题
在项目时用到maven管理项目,在一个就项目的基础上开发新的项目;关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己查询的问题,解决了自己的疑惑。
问题
下面是一个简略的项目结构图
`------ 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>
maven多个子项目、父项目之间的引用问题的更多相关文章
- maven创建父项目和子项目
创建父级项目 new ----- others ------ maven project 创建好后删除,pom.xml以外的文件 点击pom.xml文件,修改Packaging属性为 ...
- 适AT maven多个子项目、父项目之间的引用问题
适AT maven多个子项目.父项目之间的引用问题 在项目时用到maven管理项目,在一个就项目的基础上开发新的项目:关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己 ...
- 在Maven父项目下创建子项目
第一步:在父项目上右击,选择NEW 第二步:选择Maven下的Maven Module ------Next 第三步,Next 第四步点击Advanced-----Name template选择如下 ...
- Maven下把父项目下的子项目导出到myeclipse中
第一种在父项目下已有子项目:右击空白------import 第二步Maven4MyEclipse-----------Existing Maven Projects 第三部选择父项目下面的子项目 ...
- vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值
axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...
- 创建maven父项目以及子项目
创建maven父项目以及子项目(Eclipse创建Maven Project跟Maven Module)https://blog.csdn.net/Mrsanger/article/details/8 ...
- Maven父项目 以SpringBoot项目为例
父项目pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- 大数据学习day39----数据仓库02------1. log4j 2. 父子maven工程(子spring项目的创建)3.项目开发(埋点日志预处理-json数据解析、清洗过滤、数据集成实现、uid回补)
1. log4j(具体见log4j文档) log4j是一个java系统中用于输出日志信息的工具.log4j可以将日志定义成多种级别:ERROR / WARN / INFO / DEBUG ...
- Maven搭建SpringMVC+MyBatis+Json项目(多模块项目)
一.开发环境 Eclipse:eclipse-jee-luna-SR1a-win32; JDK:jdk-8u121-windows-i586.exe; MySql:MySQL Server 5.5; ...
随机推荐
- 【 Codeforces Global Round 1 B】Tape
[链接] 我是链接,点我呀:) [题意] x轴上有m个连续的点,从1标号到m. 其中有n个点是特殊点. 让你用k段区间将这n个点覆盖. 要求区间的总长度最小. [题解] 一开始假设我们需要n个胶带(即 ...
- Wizard's Tour
F. Wizard's Tour time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- in与exists的区别
转载自:http://blog.csdn.net/lick4050312/article/details/4476333 select * from Awhere id in(select id fr ...
- Axis2中使用wsdl2java.bat生成客户端代码
1 准备环境 (1)下载Axis2的zip包axis2-1.5.5-bin.zip,并解压. 官方网址:http://ws.apache.org/axis2/ (2)设置环境变量(我的电脑->属 ...
- 解决Linux ssh登录马上退出问题
纠结了非常久,最终找到解决方法: 把sshd_config文件里的UsePAM改成no就能够了
- nyoj891(区间上的贪心)
题目意思: 给一些闭区间,求最少须要多少点,使得每一个区间至少一个点. http://acm.nyist.net/JudgeOnline/problem.php?pid=891 例子输入 4 1 5 ...
- STL在迭代的过程中,删除指定的元素
直接上Code,上 Picture #include <iostream> #include <list> using namespace std; // STL在迭代的过程中 ...
- jenkins配置邮箱遇到的问题
错误一:发送测试邮件测试配置没有填写接收者的邮箱 原因:没有写接收者的邮箱 2.写了接受者的邮箱 密码错误 解决办法:qq邮箱>设置>账户,发送短信后点我已发送,就会接收到密码 3.发送时 ...
- spark之map与flatMap差别
scala> val m = List(List("a","b"),List("c","d")) m: List[ ...
- 【POJ 2442】 Sequence
[题目链接] http://poj.org/problem?id=2442 [算法] 堆 [代码] #include <algorithm> #include <bitset> ...