依赖性分析
如果您有一个包含多个模块并使用多个库的大型 Java 项目,任何需要进行重要结构变更的操作都可能会很困难。 例如,如果您决定删除其中一个库、提取一个 API 或一个新模块,或通过切换到 Java 9 Jigsaw 模块对您的应用进行模块化处理,您需要分析项目中的依赖关系,以确保您的更改不会破坏任何内容。
IntelliJ IDEA 提供了一种工具,允许您在应用程序的模块、包和类之间 分析依赖 ,并为结构更改做好准备——依赖分析器。
分析依赖性
在主菜单中,前往 。
或者,若您想分析特定项目,请在 项目 工具窗口中右键点击它,然后选择 。
在打开的对话框中,指定您要分析的文件范围。

如果尚未创建必要的 scope,请点击
并在打开的对话框中 定义一个新的 scope。
若要将测试代码与生产代码一起分析,请选择 包含测试代码(T) 选项。
如果您想分析传递依赖并指定必要的阈值,请选择 显示可传递依赖项 选项。
例如,A 依赖于 B,B 依赖于 C。 通过将阈值设置为 1,IDE 将显示 A 的 B 和 C 依赖项。 通过将阈值设置为 0,只有 B 依赖项会显示为 A。
点击 分析 以运行分析。
分析完成后,结果将显示在 依赖关系查看器 工具窗口中。
在工具窗口的左侧窗格中,选择您要搜索依赖项的节点。
在右侧窗格中,选择所选节点所依赖的节点。
搜索结果显示在工具窗口的下窗格中。 请使用工具栏上的 选项来管理搜索结果。

分析模块依赖性
模块依赖分析显示了在指定范围内存在的所有模块、在 Dependencies 选项卡中的 项目结构 对话框中指定的这些模块之间的关系以及模块之间的循环依赖关系。
您可以使用这种类型的分析来确保您之前定义的依赖关系仍然存在于您的项目中。
在主菜单中,前往 。
如果在 项目 工具窗口中没有选择模块,系统会提示您指定分析范围。 您可以检查整个项目、当前模块或模块组。
或者,右键点击 项目 工具窗口中的一个模块,然后选择 。
模块依赖项 工具窗口打开,列出了所选文件范围内的所有模块。
如果在选定的模块中发现任何 cyclic dependencies ,它们将显示在工具窗口的右侧。

在树视图中选择一个模块,然后点击
工具窗口的工具栏上的 模块依赖项 来查找依赖于所选模块的模块。
在打开的对话框中,指定您要分析的文件范围。
若要将测试代码与生产代码一起分析,请选择 包含测试代码(T) 选项。
如果您想分析传递依赖并指定必要的阈值,请选择 显示可传递依赖项 选项。
例如,A 依赖于 B,B 依赖于 C。 通过将阈值设置为 1,IDE 将显示 A 的 B 和 C 依赖项。 通过将阈值设置为 0,只有 B 依赖项会显示为 A。
点击 分析 以运行分析。
分析完成后,结果将显示在 依赖关系查看器 工具窗口中。
在工具窗口的左侧窗格中,选择您要搜索依赖项的节点。
在右侧窗格中,选择所选节点所依赖的节点。
搜索结果显示在工具窗口的下窗格中。 请使用工具栏上的 选项 来管理您的搜索。
模块依赖关系工具窗口
运行 Analyze Module Dependencies 选项后,将会显示此工具窗口,并根据模块设置中的定义显示模块依赖关系。 在此工具窗口中,您可以更改依赖关系的方向并对源代码进行更详细的分析。
工具栏按钮
条目 | 描述 |
|---|---|
关闭当前选项卡。 | |
打开 指定依赖分析范围 对话框并分析依赖。 | |
更改依赖关系的方向。 | |
| 包括测试依赖项。 |
上下文菜单选项
条目 | 快捷键 | 描述 |
|---|---|---|
展开全部 / 折叠全部 | Ctrl+NumPad +/Ctrl+NumPad - | 折叠或展开所有节点。 |
打开模块设置 | F4 Ctrl+Enter | 在 项目结构 对话框 (Ctrl+Alt+Shift+S) 的 模块页面 中打开所选模块的设置。 |
分析依赖关系 分析向后依赖关系 分析循环依赖关系 | 选择下列选项之一以分析依赖项。 |
分析循环依赖关系
通过分析循环依赖,您可以检测指定范围内包之间的循环关系。
例如,当包 1 中的类引用包 2 中的类,包 2 中的类引用包 3 中的类,包 3 中的类引用包 1 中的类时,就会发生循环。

在主菜单中,前往 。
或者,右键点击 项目 工具窗口中的某项,然后选择 。
在 指定循环依赖分析范围 对话框中,选择您想要分析的文件范围。
若要将测试代码与生产代码一起分析,请选择 包含测试代码(T) 选项。

点击 确定(O) 以运行分析。
分析完成后,结果将显示在 依赖关系查看器 工具窗口中。
在工具窗口的左侧窗格中,选择您要在其中搜索循环依赖的节点。
搜索结果显示在右侧窗格。 请使用工具栏上的 选项来管理搜索结果。

分析向后依赖关系
通过此类分析,您可以在某个文件范围内找到依赖于指定分析范围(整个项目、模块、文件、未版本化文件等)的其他类或模块。
分析向后依赖关系可能会耗费时间,尤其是在大型项目中。
依赖查看器
分析完成后, 依赖关系查看器 工具窗口会自动打开并显示结果。 要手动打开工具窗口,请转到主菜单中的 ,但请确保先运行分析。
依赖关系查看器 由以下区域组成:
工具窗口顶部的工具栏。 请使用这些 按钮来筛选依赖项。
工具窗口左侧的 分析过的代码 面板包含项目树。 选择想要查找依赖项的项目会打开 父代码 窗格。
右侧的 父代码 窗格显示了您的选择所依赖的项目。
工具窗口底部的 使用 窗格会在您选择 父代码 窗格中的项目时打开。

分析代码工具栏按钮
条目 | 工具提示与快捷键 | 描述 |
|---|---|---|
关闭 | 关闭工具窗口的当前选项卡。 | |
重新运行 Ctrl+F5 | 在相同标签中重新运行依赖性分析。 | |
平展软件包 | 将所有包显示为单层树视图。 | |
| 显示文件 | 在 分析过的代码 和 父代码 面板上显示文件。 否则,两个窗格只显示包。 |
| 显示模块 | 在树状视图中显示相应模块下的项目。 否则,项目项会显示在它们的包下。 |
平展模块 | 按用户定义的模块组排列树中的项目。 | |
按作用域类型分组 | 将树中的项目按范围分组(生产、测试、库等)。 | |
仅显示非法移民 | 仅显示非法和无效的依赖项。 | |
非法掩码 | 将所选依赖项标记为非法。 | |
编辑规则 | 为依赖分析 定义规则。 | |
导出到文本文件 | 将分析结果导出到文本文件或复制到剪贴板。 |
验证依赖关系
在分析依赖关系时,您可能需要从分析过程中排除某些依赖关系。 您可以使用 验证依赖项 选项来完成此操作。
在 依赖关系查看器 工具栏上,点击
编辑规则 按钮。
在打开的对话框中,声明描述无效和有效依赖关系的规则。
在对话框的所需部分中根据您要创建的规则点击
。
如果您希望忽略 import 语句中的引用,请选择 跳过import 语句 复选框。
应用更改并关闭对话框。

点击
工具栏上的 依赖查看器 ,以使用新规则重新运行分析。
