.jar文件和.dll文件之间的区别

2022-08-31 13:40:22

这些天我正在学习Java,我花了很多时间在.NET上,所以当我想导出或导入库时,它们通常是.dll格式,在.NET环境中称为程序集,它们被编译为IL,无论如何,它们可以拥有图像,XML,音频等资源。

我也想知道Java中相同的过程。我读过文件,但他们实际上让我有点困惑,为了澄清事情,我需要你的帮助。

问题:

  1. .NET Assembly 与 Java .jar是一回事吗?

  2. .dll包含已编译的 IL 代码,.jar包含已编译的.class/字节代码文件?

  3. 他们说资源,我们在这里谈论的是什么样的资源?图像,.txt文件等或所有可能?

  4. 我已经检查了AWS(Amazon Web Service API for java),我看到了三.jar文件,它们是

    1. aws-java-sdk-1.1.1.jar
    2. aws-java-sdk-1.1.1-javadoc.jar
    3. aws-java-sdk-1.1.1-sources.jar

它们包含.class文件 - html格式的java文档和尚未编译.java文件。因此,我意识到.jar不仅包括编译的字节码(.class)和其他内容。

  1. 当我想导入java库时,我是否总是需要导入.jar文件?
  2. 当我想导出我自己的java库时,我是否需要导出.jar文件。

提前感谢您的帮助。


答案 1

.NET 程序集与 Java .jar相同吗?

他们扮演着相同的角色,是的。

.dll包含已编译的 IL 代码,.jar包含已编译的.class/字节代码文件?

是的。虽然JAR只是zip文件(您可以在自己喜欢的Zip工具中打开它们),因此它们可以真正包含任何内容。

他们说资源,我们在这里谈论的是什么样的资源?图像,.txt文件等或全部都是可能的?

JAR 中允许任何文件类型。您的Java代码可以通过getResourceAsStream或getResource等方式访问jar中文件的内容。显然,JAR中的.class文件都经过特殊处理(作为字节码)。

我检查了AWS(Amazon Web Service API for Java),我看到了三个.jar文件,它们是:aws-java-sdk-1.1.1.jar,aws-java-sdk-1.1.1-javadoc.jar,aws-java-sdk-1.1.1-sources.jar

上述包装相当普遍。有时人们使用.jar作为.zip的替代文件扩展名。我发现这种做法令人困惑,但这并不罕见,亚马逊在这种情况下已经做到了。我认为这种做法随着Maven的推出而变得更加普遍,Maven将参考源代码存储在名为.jar的文件中。

aws-java-sdk-1.1.1.jar - 这是编译和执行所需的唯一文件。它包含库正常运行所需的类(.class文件)和资源。

aws-java-sdk-1.1.1-sources.jar - 这只是一个包含库的源代码(.java文件)的 zip 文件。编译或执行不是必需的。提供它是为了帮助您解决在使用库时可能遇到的问题。您可以解压缩此文件并从硬盘驱动器中读取源代码。但是,您的 IDE 可以通过创建指向主库 JAR 的“源附件”来直接使用此文件。通过在 IDE 中设置此库>源关联,当您在库类上使用 IDE 的“转到定义”功能时,IDE 将能够向您显示库的源代码。

aws-java-sdk-1.1.1-javadoc.jar - 这只是一个包含库的 JavaDoc 的 zip 文件。同样,编译或执行不是必需的。JavaDoc只是HTML,因此您可以解压缩此文件并直接从硬盘驱动器读取JavaDoc HTML。但是,大多数 IDE 可以创建指向主库的“Javadoc 附件”,这允许您从 IDE 中为库提取上下文相关的 JavaDoc。实际上,大多数IDE可以从-source.jar动态生成JavaDoc,所以我很少再使用Javadoc jars了。

当我想导入Java库时,我是否总是需要导入.jar文件?

它通常被称为“将 JAR 添加到类路径”,但是是的。你几乎总是需要帮助Java找到你正在使用的所有JAR,在你构建或执行时通过构造一个类路径。通常,与在 .NET 中使用 DLL 相比,使用 JAR 和类路径是一个更加手动和显式的过程。例如,Java 没有直接等效于 。NET的“全局程序集缓存”;此外,vanilla Java不会自动从工作目录中加载.jars。

还有其他一些技术可以创建更“自动”的感觉类路径,但它们有点高级:例如,Manifest.MF类路径是可能的 - 但是这种方法很少使用,因为它很脆。从 Java 6 开始,Java 对在类路径中使用通配符的支持有限。

当我想导出我自己的Java库时,我是否需要导出.jar文件

这是标准的,是的。


答案 2

我可以回答这个问题的一部分:-)

据我所知,a只是一个“Java归档”文件。它可以包含您想要的任何内容,但最常用于分发库的二进制版本。它还可用于分发可执行文件 - 双击JAR文件将启动应用程序,如果它是打包的方式。jar

因此,可能很难判断特定文件的用途。例如,什么是 ?。它是自我安装吗?压缩代码存档?如果不阅读文档,这是任何人的猜测。jaraws-java-sdk-1.1.1-sources.jar


编辑:举个例子,我刚刚下载了JAI文件,假设它是库的二进制版本。但实际上,它包含安装程序应用程序。jar


推荐