Maven子父工程依赖配置,小白也能看得懂
Maven子父工程依赖配置你还在对Maven子父工程依赖配置感到疑惑吗?看了这篇文章你讲对它们有个新的认知在阅读本文之前你要已经了解并使用过maven来管理项目的jar包直接开干环境/版本一览:开发工具:Intellij IDEA 2020.2.3jdk:1.8.0_211maven:3.6.3创建父工程新建maven项目 这里不要勾选maven模版设置项目信息修改父工程pom.xml<?x
Maven子父工程依赖配置,小白也能看得懂
1.Maven子父工程依赖配置
你还在对Maven子父工程依赖配置感到疑惑吗?看了这篇文章你讲对它们有个新的认知,小白也能看得懂
在阅读本文之前你要已经了解并使用过maven来管理项目的jar包
直接开干。(下面说的子模块和子工程是同一个意思)
2.环境/版本一览:
- 开发工具:Intellij IDEA 2020.2.3
- jdk:1.8.0_211
- maven: 3.6.3
3.创建父工程
- 新建maven项目 这里不要勾选maven模版
- 设置项目信息
- 修改父工程pom.xml
<?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.abc</groupId>
<artifactId>project</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- packaging的默认打包类型是jar
所有的父工程打包方式都需要设置成pom
-->
<packaging>pom</packaging>
<!-- 当前是父工程-->
<!--
依赖配置:
目前这里的配置的依赖所引入的jar包在此工程下的所有子工程都会被引入
-->
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
</dependencies>
<!--
依赖管理:
这里的配置的依赖只是对依赖版本的管理配置,子工程并不会直接引入
如果子工程要需要引入只需要加入如下标签:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
这样就可以引入mysql的驱动了,这样的好处就是可以在父工程统一一下整个工程的jar包依赖版本
而且如果有的工程不需要一些jar就可以不进行引入
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
父工程的src不含有任何业务逻辑,我们直接将其删除
父工程建好了 依赖也配置好了,接下来我们创建几个子工程
4.创建子工程
- 创建project-common
我们在开发中经常有些公共的工具类,现在可以创建一个子工程叫project-common 把这些类都放进去
子工程完毕后我们回到父工程的pom.xml 可以发现idea帮我们加入了如下配置。<modules>标签是配置该工程下的子模块名
检查一下project-common工程的pom.xml有没有如下标签 (因为有的idea不会自动加入这个)
<parent>
<artifactId>project</artifactId>
<groupId>com.abc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
在这个位置。这是在子模块中配置父工程的信息
- 查看依赖
可以看到子工程并没有引入 父工程<dependencyManagement>里的依赖,只是引入了父工程<dependencies>的依赖
在子工程试一下看能不能使用fastjson包里的内容
可以正常使用
接下来我们在project-common工程里引入一下父工程<dependencyManagement>里的包
- 引入父工程<dependencyManagement>里的包
在project-common工程的pom.xml中的<dependencies>里加入如下配置
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
如果我子工程不想使用父类设置的版本呢
- 重写父工程依赖的版本
还是按照刚才的方式修改一下版本
<version>8.0.22</version>
可以看到子模块的依赖版本被更改了
到此为止子父工程的依赖基本使用就说完了
在实际开发中都是一个父工程有许多子工程,那么一个子工程该如何使用另一个工程的类呢
5.子模块之间引用依赖
- 先在project-common创建一个类 MyStringUtils
package com.abc;
/**
* @description: s
* @author: nxq email: niuxiangqian163@163.com
* @createDate: 2020/12/17 3:15 下午
* @updateUser: nxq email: niuxiangqian163@163.com
* @updateDate: 2020/12/17 3:15 下午
* @updateRemark:
* @version: 1.0
**/
public class MyStringUtils {
/**
* 判断字符串是否为空
* @author nxq
* @param obj:
* @return boolean
*/
public static boolean isEmpty(String obj){
return null == obj || "".equals(obj);
}
}
- 再创建一个子工程叫 project-auth
创建成功是这样
可以在 project的pom.xml看到新增了如下配置
接下来在project-auth的pom.xml加入如下配置
<parent>
<artifactId>project</artifactId>
<groupId>com.abc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.abc</groupId>
<artifactId>project-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
去验证一下看能不能在project-auth里使用刚才在project-common创建的工具类MyStringUtil
一顿操作猛如虎,工资得涨三千五,大功告成
6.打包
打包直接在父工程下install就行
6.补充
刚才新建子工程的时候都是在父工程上右键新建的,如果在子工程上右键那么新建的工程就是被右键的工程的子工程。它们的子父关系与上面解释的同理,可以一层层创建
代码已经推送至github:https://github.com/NiuXiangQian/parent-children-project
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)