IDEA库(Libraries)和模块依赖(Dependencies)详解

Posted WongLapyip

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA库(Libraries)和模块依赖(Dependencies)详解相关的知识,希望对你有一定的参考价值。


库是模块可以依赖的已编译代码的集合。在IntelliJ IDEA中,可以在三个级别上定义库: 全局 (可用于许多项目), 项目(可用于项目中的所有模块)和模块 (可用于一个模块)

简单来说,IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,可以从这里把包导入到模块依赖(Dependencies)中。
另外:每个库或依赖其实可以包含多个jar包,这里我们是按单个jar包来说明。

导入外部jar包到项目库

前提:手动在项目中添加需要的jar包,(这里以JavaWeb项目,其中包含多个模块为例,在模块的WEB-INF/lib目录下添加)

  • 方法一:直接右击jar包,添加到库

    这个jar包会作为一个新库添加到项目库,同时添加到oa3模块的依赖中。

  • 方法二:在Project Structure → Libraries中添加


为模块添加依赖(jar包)

对于需要在代码中实际使用的包,都要添加到依赖才能使用其属性或方法。此处项目中有多个模块,所以要为每个模块分别添加所需要的jar包,为对应模块添加的依赖都会显示在右侧(只有这里有的才能在代码中使用)。

点击加号可以添加依赖(jar包),第一种是从外部导入jar包,找到下载好的包直接添加即可;第二种是从项目库(Libraries)中导入jar包,(项目库中的包可以被此项目中的多个模块使用)。

注意!

依赖添加完成后,可能会有问题警告

这是因为在项目编译后的文件中缺少所需要的依赖(jar包),此时可以直接点击 [Fix],把jar包添加到编译后的项目中,点击Artifacts可以查看编译后的项目结构。同样,在这里也可以手动添加所缺少的jar包。

IntelliJ IDEA 中的“模块依赖”和“库”有啥区别?

【中文标题】IntelliJ IDEA 中的“模块依赖”和“库”有啥区别?【英文标题】:What is the difference between "Module Dependencies" and "Libraries" in IntelliJ IDEA?IntelliJ IDEA 中的“模块依赖”和“库”有什么区别? 【发布时间】:2012-08-29 11:34:06 【问题描述】:

当您想在项目中添加.jar 库时,IntelliJ IDEA 中的“模块依赖项”和“库”有什么区别?另外,当您将 .jar 库添加到 IntelliJ IDEA 中的“模块依赖项”时,“导出”复选框是什么?

在每种方式中,在创建新生成的.jar 文件时,包含的.jar 库中的类和代码如何集成到您的最终项目(代码)中?

【问题讨论】:

“库”是指“项目结构”窗口中带有“库”标题的部分! 【参考方案1】:

"In IntelliJ IDEA, libraries can be defined at three levels: global (available for many projects), project (available for all modules within a project), and module (available for one module)."

全局库通过项目结构\平台设置\全局库设置 项目库是通过项目结构\项目设置\库设置的 模块库是通过 Project Structure\Project Settings\Modules\Dependencies 设置的

【讨论】:

这个答案和 ONLY 这个答案正确地解决了这个问题。 +1 这个答案没有解决导出功能。但我同意,从引导我到这里的问题标题来看,这个答案提供了我正在寻找的知识。虽然其他答案考虑了术语“模块依赖项”和“库”的一般含义,但这个答案考虑了它们在 IntelliJ 的 UI 中的含义(Project Structure > Modules > Dependencies vs. 项目结构 > 库).【参考方案2】:

模块依赖项是模块文件引用的类、档案、库和资源。库是存储在档案或目录中的一组类文件。

导出检查意味着如果检查,那么这个库将被隐式添加到引用这个库的另一个模块中。

要创建 .jar 文件,您需要创建一个工件。 Artifact 是建筑输出的占位符。有用于创建 .jar.war.ear 档案的预定义模板。您可以选择 jar 来构建 jar 工件。默认情况下,它定义为空,您需要定义工件的内容。您可以将已编译的输出拖放到其中,但不要使用库存档。因为在这种情况下,库将被打包在 .jar 文件中,并且您将需要创建一个单独的类加载器来在应用程序启动之前加载它们。相反,您将工件类型更改为 Other 并将 .jar 和相关库拖到 输出根 中。这样库档案将与创建的 .jar 一起复制。您还需要创建一个 MANIFEST.MF 并在那里为依赖库指定 Class-Path。所有文件都将存储在您为构建工件指定的目录中。您可以使用 Build Artifact 菜单来构建它。

【讨论】:

这篇文章对我帮助很大,但你需要更新它。 IntelliJ 今天有一个选项可以自动复制所有 jar 文件并将您的 Manifest 链接到 Class-Path 中的 jar 文件。为此:在创建工件时选择 JAR 而不是其他,然后在“库中的 JAR 文件”中选择“复制到输出目录并通过清单链接”【参考方案3】:

如果您的项目包含多个模块,“模块依赖关系”定义了这些模块之间的依赖关系,但库是您的模块使用的编译类(通常是 jar 文件,可选地包含它们的源代码和 javadocs)。

每个模块都可以有自己的库和工件(例如结果 jar 文件),并且可以依赖其他模块而没有循环依赖。

【讨论】:

【参考方案4】:

Module Dependencies 选项卡可以包含 LibrariesExport 表示模块中的库也可用于依赖于此的另一个模块模块。

可以使用 Artifacts 创建包含所有依赖项的最终 jar。

【讨论】:

以上是关于IDEA库(Libraries)和模块依赖(Dependencies)详解的主要内容,如果未能解决你的问题,请参考以下文章

idea启动非maven项目(本地jar包)的配置

idea启动非maven项目(本地jar包)的配置

idea启动非maven项目(本地jar包)的配置

IDEA项目lib依赖问题解决

idea运行web

idea启动非maven项目(本地jar包)的配置