如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目

如何使用 IDEA 构建父/子工程类型的Maven项目


Maven的继承性

在一家公司里开发,很多项目中使用的jar包80%都是重复的,如果每个项目都要把pom.xml文件的这些依赖包复制过来,或是后期出现统一的版本升级,那修改起来是很麻烦的。

这里可以使用maven的继承特性来消除重复依赖,可以把很多相同的配置提取出来。例如:grouptId,version等


一、创建父工程

  • 父工程的打包类型必须是POM

1、打开IDEA,选择New Project

在这里插入图片描述

2、选择Maven选项,构建一个maven项目

  • 左侧选择Maven,勾选右侧Create from archetype选项,选择下面区域中的 maven-archetype-site-simple 类型

在这里插入图片描述

注意这类项目和原来项目的区别在于,打包方式是pom

<groupId>com.kkb</groupId> 
<artifactId>father</artifactId> 
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

3、创建项目名称,选择项目路径

可自定义GroupId,ArtifactId的值

在这里插入图片描述

4、在 Maven home directory 中选择自己下载的Maven

有时我们会发现 IDEA 在每次新建项目时 maven home directory 总是会变回默认的Maven。我们可以修改Maven仓库全局配置解决。

参考地址:https://blog.csdn.net/LK_Lawliet/article/details/108444328

在这里插入图片描述

由于pom项目一般都是用来做父项目的,所以该项目的src文件夹可以删除掉。

5、父工程创建完毕

在这里插入图片描述
⚠ 存在问题

在创建完父工程后,pom.xml文件中的 maven-project-info-reports-plugin 插件会飘红

在这里插入图片描述

原因maven-project-info-reports-plugin 缺少依赖,我们可以在pom.xml中添加父依赖

解决如下:

在这里插入图片描述


二、创建子工程

创建方式有两种:

  • 一种是创建新工程为子工程,在创建时设置父工程的GAV

  • 一种是修改原有的工程为子工程,在子工程的pom.xml文件中手动添加父工程的GAV

1、右击项目,选择 New -> Module

在这里插入图片描述

选择要创建的子项目类型(默认为Java类型)

在这里插入图片描述

此时只需要添加子项目名称即可,然后一直下一步

在这里插入图片描述

2、子工程创建完毕

在这里插入图片描述


三、父工程统一管理版本号

在开发中依赖的jar包众多,对应的版本也是很杂乱,那有没有一种方式可以统一管理这么jar包的版本值呢?当然 是有的,Maven使用dependencyManagement来管理依赖的版本号。

注意:此处只是定义依赖jar包的版本号,并不实际依赖。如果子工程中需要依赖jar包还需要添加dependency节点。

< dependencies > 中的jar直接加到项目中,管理的是依赖关系(如果有父pom,子pom,则子pom中只能被动接受父类的版本);

< dependencyManagement > 主要管理版本,对于子类继承同一个父类是很有用的,集中管理依赖版本不添加依赖关系,对于其中定义的版本,子pom不一定要继承父pom所定义的版本。

父工程:声明版本

<dependencyManagement> 
	<dependencies> 
		<dependency> 
			<groupId>com.kkb</groupId> 
			<artifactId>demo2</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency> 
	</dependencies>
</dependencyManagement>

子工程:不需要指定版本号(继承父元素)

<parent> 
	<groupId>com.kkb</groupId> 
	<artifactId>father</artifactId> 
	<version>1.0-SNAPSHOT</version>
</parent>

<dependencies> 
	<dependency> 
		<groupId>com.kkb</groupId> 
		<artifactId>demo2</artifactId> <!--这里不需要指定版本-->
	</dependency>
</dependencies>

父工程中版本号提取

当父工程中定义的jar包越来越多,找起来越来越麻烦,所以可以把版本号提取成一个属性集中管理。

<properties> 
	<log4j.version>1.2.9</log4j.version>
</properties>

注意:这里的log4j.version的值是自定义的,但命名时不要使用中文或特殊字符等,标签对中间写版本值

使用:${log4j.version}读取该变量值,代码如下

<dependencies> 
	<dependency> 
		<groupId>junit</groupId> 
		<artifactId>junit</artifactId> 
		<version>${log4j.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

子工程的jar包版本不受影响

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值