IDEA 创建 Maven 多模块项目
实际应用中,一个项目往往会包含多个模块,本文以三个模块为例演示了 IDEA 多模块项目的创建方法。
作者:王克锋
出处:https://kefeng.wang/2017/03/19/idea-modules/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
1.概述
一个项目会包括多个模块,比如典型的 WEB 项目可以划分为以下 utils / api / web 三个模块。其中 api 依赖于 utils, api 与 web 并列。
2.创建项目
2.1 创建父项目 site-demo
- 菜单: File / New / Project
- “Maven”: 不要勾选 “Create from archetype”, 直接点击 “Next”
- 填写项目坐标: GroupId=”wang.kefeng”, ArtifactId=”site-demo”, Version=”1.0-SNAPSHOT”
- 填写项目位置: projectName=”site-demo”, projectLocation=”…\site-demo”
- 删除目录 src,因为父项目只用来管理各模块,没有源码
2.2 创建子模块 site-utils
该模块是普通的 Java 项目,不包括 Web 内容。
- 右键点击父项目 site-demo,点击菜单项 New / Module
- “Maven”: 不要勾选 “Create from archetype”, 直接点击 “Next”
- 填写项目坐标: 只能填写 ArtifactId=”site-utils”, GroupId/Version 被限制为与父项目相同
- 填写项目位置: projectName=”site-utils”, projectLocation=”…\site-utils”
2.3 创建子模块 site-api
与模块 site-utils 类似,但创建后要添加对 site-utils 的依赖:1
2
3
4
5
6
7<dependencies>
<dependency>
<artifactId>site-utils</artifactId>
<groupId>wang.kefeng</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2.4 创建子模块 site-web
- 与模块 site-utils 类似,创建模块 site-web
- 主菜单 File / Project Structure, 打开 “Project Structure”
- 进入 Module,选择模块 site-web,再点加号图标,选择 Web
- 修改 web.xml 路径为(原为 “…\web\WEB-INF\web.xml”) “…\src\main\webapp\WEB-INF\web.xml”
- 修改 web 资源路径(原为 “…\web”) 为 “…\src\main\webapp”
3.创建结果
3.1 site-demo/pom.xml
包含了父项目自身的坐标,还有它管辖的三个模块。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<groupId>wang.kefeng</groupId>
<artifactId>site-demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>site-api</module>
<module>site-utils</module>
<module>site-web</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
3.2 site-utils/pom.xml
定义子模块的坐标,先继承父项目,再定义自身的 artifactId。1
2
3
4
5
6<parent>
<artifactId>site-demo</artifactId>
<groupId>wang.kefeng</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>site-utils</artifactId>
3.2 site-api/pom.xml
与模块 site-utils 类似,定义子模块的坐标,先继承父项目,再定义自身的 artifactId;
另外还指定了所依赖模块的坐标(site-utils)。1
2
3
4
5
6
7
8
9
10
11
12
13
14<parent>
<artifactId>site-demo</artifactId>
<groupId>wang.kefeng</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>site-api</artifactId>
<dependencies>
<dependency>
<artifactId>site-utils</artifactId>
<groupId>wang.kefeng</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
3.2 site-web/pom.xml
与模块 site-utils 类似,定义子模块的坐标,先继承父项目,再定义自身的 artifactId;
另外指定了打包方式为 war(非 WEB 模块无需指定,默认为 jar 方式)。1
2
3
4
5
6
7
8<packaging>war</packaging>
<parent>
<artifactId>site-demo</artifactId>
<groupId>wang.kefeng</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>site-web</artifactId>