idea 模块jdk依赖总是自动变_IntelliJ IDEA使用模块依赖关系

IntelliJ IDEA 模块依赖关系

IntelliJ IDEA 模块依赖是模块使用的东西。

模块依赖关系可能包括:一个 SDK,如果在模块依赖关系中存在,则被称为模块 SDK。

库:存档(JAR)的集合以及具有类文件,源和文档的目录。

属于同一项目的其他模块。

编译或运行代码时,使用模块依赖关系来形成编译器或 JVM 的类路径。(如果有,本机库位置将被添加到 java.library.path 而不是类路径中。)

IntelliJ IDEA 管理模块依赖关系

与使用模块依赖关系相关的大部分任务都在“项目结构”对话框(文件| 项目结构(File | Project Structure))中执行:选择模块,选择感兴趣的模块,然后选择依赖关系。

使用以下图标和上下文菜单命令:(Alt+Insert)和 

(Alt+Delete)来添加和删除依赖关系。请参阅添加依赖关系。

(Alt+Up)和 

(Alt+Down)来重新排序项目。(当列表排序时,不能对项目重新排序)

 编辑库。

导航(Navigate)(F4)切换到所选依赖关系的配置,以查看其设置和内容。

查找使用实例(Find Usages)(Alt+F7)以找出所选项目所用的模块。

移动到项目库,移动到全局库,将选定的模块库移动到项目或全局级别。

复制到模块库,以便在模块级别创建所选项目或全局库的副本。

添加依赖关系

在依赖关系列表的旁边,点击

并选择:JAR 或目录。 在打开的对话框中,选择要添加到依赖关系的文件和文件夹。(对于每个选定的文件和文件夹,创建一个未命名的模块库。)

库。 在打开的对话框中,选择一个或多个库并单击添加所选项。(您也可以创建一个新的库:新建库,然后将其添加到依赖关系:添加所选项)。

模块依赖关系。 在打开的对话框中,选择要添加到依赖关系的模块。

另请参阅,将全局或项目库添加​​到模块依赖关系。

依赖关系列表进行排序

通过单击标题行中的单元格, 可以按它们的名称 (中心列) 和作用域对依赖项进行排序。首次点击。该列表按升序顺序按相应列排序。排序标记出现在单元格中:

第二次点击。列表更改为降序;排序标记更改为:

第三次点击。恢复初始未排序状态。

在对列表进行排序时,不能更改依赖关系的顺序。

依赖关系的顺序

模块依赖关系按照它们在相应列表中的显示顺序进行处理。

在编译时,列表中的项目顺序定义了编译器(javac)查找类来解析相应引用的顺序。在运行时,此列表定义 JVM 搜索要加载的类的顺序。

使用库修补程序。如果要对某些库使用修补程序,则应将这些修补程序放在主库之前的列表中。否则,新版本的类(包含在修补程序中)将被忽略。

类路径,bootclasspath 和 JDK 位置。 对于编译,列表中与模块 JDK 相关的项的位置可能很重要:在 JDK 之后出现的项目将转换为模块类路径项。你通常处理的大多数库都应该去那里。

在 JDK 之前出现的项目对应于模块 bootclasspath 条目。为了使编译成功,必须在模块 bootclasspath 中包含某些库 (例如, 与 JDK 本身及其扩展有关的程序)。所以,这样的库必须出现在 JDK 之前的列表中。但是,在非常有限的特殊情况下,可能需要使用这些库。因此,对于大多数模块,JDK 将(并且应该)成为依赖关系列表中的第一个项目。

控制源和测试的编译和运行时类路径

您可以在运行测试时指定是否应该包含依赖项 classpath 1)编译模块来源 2)编译模块测试源 3)运行编译源4)。您可以通过为依赖关系范围("依赖关系" 选项卡上的 "范围" 列)选择以下选项之一来执行此操作:编译。依赖关系包含在编译和运行阶段的源和测试源的类路径中。

测试。依赖关系仅在编译和运行测试源时才包含在类路径中。

运行。只有运行源代码和测试源时,依赖关系才包含在类路径中。

提供。对于您的源,依赖关系仅在编译阶段包含在类路径中。当有容器时(例如 Web 容器),它在运行时提供相应的依赖关系。对于您的测试源,依赖关系在构建和运行阶段都包含在类路径中。正常情况下,应用程序服务器库包含在提供范围的依赖关系列表中。

下表总结了可能的依赖关系范围的类路径信息。范围来源,

编译时来源,

运行时测试,

编译时测试,

运行时

编译++++

测试--++

运行-+-+

提供+-++

处理测试源的依赖关系。 请注意,IntelliJ IDEA 与其他构建工具(例如 Gradle 和 Maven)的不同之处在于处理测试源的依赖关系。

如果您的模块(例如,模块 A)取决于另一个模块(模块 B),IntelliJ IDEA 假设 A 中的测试源不仅取决于 B 中的源,还取决于其测试源。因此,B 的测试源也包含在相应的类路径中。

将依赖关系导出到其他模块的编译类路径

您有一个模块(模块 A)取决于另一个模块(模块 B)。

在运行时,B 的所有依赖项都包含在 A 的类路径中。

对于 A 的编译类路径,对于 B 的每个依赖项有两个选择。(为了说明,我们假设 B 在依赖关系中有一个库 L)L 包含在 A 的类路径中,如果在 B 的依赖项中,它具有“导出”选项。

如果“导出”选项关闭,L不会包含在 A 的类路径中。

若要打开和关闭导出选项,请使用 "依赖关系" 选项卡上 "导出" 列中的复选框。

请注意,导出时依赖关系范围可能会更改。我们假设:A 对 B 的依赖的范围是编译。

B 对 L 的依赖的范围是测试。

如果 L 具有导出选项,则 A 对 L 的依赖关系的范围将有效地被测试。

下表列出了这一情况以及其他一些有趣的实际案例。A 对 B 依赖,

指定范围B 对 L 依赖,

指定范围A 对 L 依赖,

产生范围

编译编译编译

编译测试测试

测试编译测试

测试测试测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值