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

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


Maven的继承性

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

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


一、创建父工程

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

1、打开IDEA,选择New Project

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第1张图片

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

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第2张图片

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

com.kkb 
father 
1.0-SNAPSHOT
pom

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

可自定义GroupId,ArtifactId的值

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第3张图片

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

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

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第4张图片

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

5、父工程创建完毕

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第5张图片
⚠ 存在问题

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第6张图片

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

解决如下:

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第7张图片


二、创建子工程

创建方式有两种:

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

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

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第8张图片

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第9张图片

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

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第10张图片

2、子工程创建完毕

如何使用 IntelliJ IDEA 构建父/子工程类型的Maven项目_第11张图片


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

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

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

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

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

父工程:声明版本

<dependencyManagement> 
	<dependencies> 
		<dependency> 
			<groupId>com.kkbgroupId> 
			<artifactId>demo2artifactId>
			<version>1.0-SNAPSHOTversion>
		dependency> 
	dependencies>
dependencyManagement>

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

<parent> 
	<groupId>com.kkbgroupId> 
	<artifactId>fatherartifactId> 
	<version>1.0-SNAPSHOTversion>
parent>

<dependencies> 
	<dependency> 
		<groupId>com.kkbgroupId> 
		<artifactId>demo2artifactId> 
	dependency>
dependencies>

父工程中版本号提取

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

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

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

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

<dependencies> 
	<dependency> 
		<groupId>junitgroupId> 
		<artifactId>junitartifactId> 
		<version>${log4j.version}version>
        <scope>testscope>
    dependency>
dependencies>

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

你可能感兴趣的:(Maven,IntelliJ,IDEA)