在IntelliJ IDEA中,“模块依赖”和“库”有什么区别?

38
在IntelliJ IDEA中,当你想向项目添加一个.jar库时,“模块依赖”和“库”有什么区别?此外,在将.jar库添加到IntelliJ IDEA的“模块依赖”时,“导出”复选框是什么意思?
在每种方式中,当创建新生成的.jar文件时,如何将包含的.jar库中的类和代码集成到最终项目(代码)中?

我所指的“Libraries”是“Project Structure”窗口中标题为“Libraries”的部分! - moorara
4个回答

13

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

导出检查表示如果选择了该选项,则将隐式地将此库添加到引用该库的其他模块中。

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


2
这篇文章对我帮助很大,但需要更新。现在的IntelliJ有一个选项可以自动复制所有的jar文件,并将你的清单链接到Class-Path中的jar文件。操作步骤如下:创建构件时选择JAR而不是其他选项,在“来自库的JAR文件”中选择“复制到输出目录并通过清单链接”。 - Eran H.

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

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


3

这个回答,仅仅这个回答,恰当地回答了这个问题。+1 - alife
这个答案没有涉及到导出功能。但是我同意,从问题标题引领我来到这里,这个答案提供了我所寻找的知识。而其他答案则考虑了术语“模块依赖”和“库”的一般含义,而这个答案则考虑了它们在IntelliJ的UI中的含义(项目结构>模块>依赖项 vs. 项目结构>库)。 - Johnson

3

模块依赖选项卡可以包含导出的意思是该模块中的库也可以在依赖于此模块的另一个模块中使用。

使用Artifacts可以创建带有所有依赖项的最终jar文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接