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