1. 打开多个 Maven Project
🧩 一、同一个 Window 中打开多个 Maven Project(推荐做法)
适合 父子依赖 或 多模块协同开发 场景。
✅ 使用方式
打开父工程(包含
pom.xml的根项目)。IDEA 会自动识别并导入所有子模块(
<modules>定义的)。-
如果你想再添加一个外部的 Maven 项目:
- 打开
View → Tool Windows → Maven; - 点击 “+” 号 → 选择另一个
pom.xml; - 选择 “Import as module”(导入为模块)而不是新建窗口。
- 打开
这样,IDEA 会把它挂载到同一个 Project 下的模块树中,
所有依赖都能联动(IDEA 会识别本地模块依赖,不走远程仓库)。
⚙️ 优点
- 统一代码索引、跳转、搜索、重构;
- 本地模块依赖可直接使用(IDEA 会自动替换 jar 为模块);
- Maven 生命周期统一执行(父项目一键 build 全部模块)。
🚪二、在不同 Window 中打开多个 Maven Project
适合完全独立的项目(没有父子关系)。
✅ 使用方式
打开第一个项目;
-
再打开第二个
pom.xml时选择:“New Window”
IDEA 会创建新的 IDE 窗口,各项目相互独立。
⚙️ 优点
- 各项目互不影响(环境变量、JDK、Maven 配置独立);
- 对大型项目或版本冲突隔离更好。
⚠️ 缺点
- 不能直接使用
module dependency(需要通过仓库安装或手动依赖); - 无法跨项目跳转源码。
💡实战建议
| 场景 | 推荐方式 | 备注 |
|---|---|---|
父子模块项目(例如:common → web → service) |
同窗口打开(Import as module) | IDEA 会识别多模块依赖 |
| 多个独立系统(不同 repo) | 分窗口打开 | 各自独立运行、调试 |
| 临时调试另一个项目库(只引用 jar) | 分窗口打开 | 不污染主项目依赖 |
| 共用底层库但不同项目 | 同窗口 + “Import Maven Project” | 本地调试方便 |
2. Q
Q:
同窗口打开父子模块项目(例如:common → web → service),这个时候修改web工程源码,common会读取新修改的值吗?还是说common读取的是依赖jar中的数据?
简短结论先说在前面:
如果
common、web、service都在同一个 IntelliJ IDEA 项目窗口中(以 Module 方式导入),
那么它们之间的依赖是“源码级联动”,而不是依赖 jar 包。也就是说:修改
common源码后,web和service立即感知到更新,无需重新打包 jar。
🔍 一、IDEA 多模块依赖的工作机制
1️⃣ Maven 层面
在 web 的 pom.xml 中,你通常写的是:
<dependency>
<groupId>cn.fancylab</groupId>
<artifactId>common</artifactId>
<version>1.0.0</version>
</dependency>
在纯命令行 Maven 下(独立项目时),Maven 会:
- 到本地仓库(
~/.m2/repository)找common-1.0.0.jar; - 没有就去远程仓库下载。
但在 IDEA 多模块项目中,情况不同👇
2️⃣ IDEA 层面
IDEA 在导入父项目时会识别到:
<modules>
<module>common</module>
<module>web</module>
<module>service</module>
</modules>
它会自动在项目结构中建立 Module → Module 依赖:
“
webdepends oncommon(module dependency, not jar dependency)”
于是:
-
web编译时直接引用common的 源码输出目录(target/classes); - 无需
install; -
common改动后重新编译即可立即生效。
⚙️ 二、IDEA 内部处理逻辑
当你保存或编译项目时(Build → Make Project 或自动编译):
- IDEA 先编译依赖模块(
common); - 将最新
.class放入其target/classes; -
web编译时直接从target/classes读取; - 运行
web时加载的就是最新common字节码。
🔁 三、对比不同场景
| 场景 | 是否源码联动 | 是否需要 install |
|---|---|---|
| 同窗口打开(Import as Module) | ✅ 是 | ❌ 否 |
| 不同窗口独立项目 | ❌ 否(依赖 jar) | ✅ 需要 install |
| 命令行 Maven 编译 | ❌ 否 | ✅ 需要 install |
单独调试 common
|
✅(同窗口) | ❌ 否 |
💡 四、实战建议
父子项目务必放在同一个 IDEA window 下(尤其是开发阶段)。
IDEA 会自动创建源码依赖,体验最顺畅。仅在发布前执行一次
mvn install,将common安装到仓库中供 CI/CD 或其他独立项目使用。-
若发现修改
common不生效:- 检查是否在同一个 window;
- 检查 IDEA Project Structure → Modules → Dependencies,确保
common是 Module 而非 Jar; - 执行一次 “Rebuild Project”。
🧭 举例说明
假设结构如下:
parent/
├── pom.xml
├── common/
│ └── pom.xml
├── service/
│ └── pom.xml
└── web/
└── pom.xml
当你修改:
// common/src/main/java/cn/fancylab/util/StringUtil.java
public static String hello() {
return "Hello FancyLab!";
}
然后在 web 里调用:
System.out.println(StringUtil.hello());
直接运行 web 工程,IDEA 会自动重新编译 common,输出最新字符串。
无需打包、无需 install。