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

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

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

问题:

  1. NET 组装和 Java.jar 是一回事吗?

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

  3. 他们说资源,我们在这里谈论什么样的资源?图片。Txt 文件等等,还是所有这些都可能?

  4. 我研究了 AWS (用于 java 的 AmazonWebServiceAPI) ,我看到了三个.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-source. jar

它们包含了。类文件-HTML 格式和。尚未编译的 java 文件。然后我意识到。Jar 不仅包括已编译的字节码(。类)和其他东西。

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

提前谢谢你的帮助。

23979 次浏览

来回答这个问题。

  1. Aws-java-sdk-1.1.1. jar
  2. Aws-java-sdk-1.1.1-javadoc. jar
  3. Aws-java-sdk-1.1.1-source. jar

1)是编译器的 java 归档文件(jar) ,它在。NET 称为 DLL。2)是 javadoc。Java 类的 HTML 文档(见1)以及方法描述。3)是1的源代码(java 文件)。

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

对于1)如果你需要使用一个在 jar 文件中找到的类,那么你需要将这个 jar 导入到你的项目中。

对于2)你不需要。您可以将依赖项 jar 绑定到库中,或者将它们打包到各自的 jar 中,然后将它们导入到项目中。

  1. NET 组装和 java.jar 是一样的。
  2. . dll 包含已编译的 IL 代码,. jar 包含已编译的. class/byte 代码文件? 回答: 。Jar 文件是应用程序所需的 Java 资源、类、图像/图标等的归档文件,就像。DLL.类文件包含编译的 java 源代码(称为 java 字节码)。

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

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

因此,可能很难说清楚特定的 jar文件的目的是什么。例如,什么是 aws-java-sdk-1.1.1-sources.jar?.是自动安装的吗?压缩代码归档?没有阅读文档,谁也说不准。


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

NET 程序集和 Java.jar 是一回事吗?

他们扮演同样的角色,是的。

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

是的。虽然 JAR 只是压缩文件(您可以用您最喜欢的压缩工具打开它们) ,所以它们实际上可以包含任何内容。

他们说资源,我们在这里谈论什么样的资源?图片。Txt 文件等等,还是所有这些都是可能的?

JAR 中允许任何文件类型。Java 代码可以通过例如 GetResourceAsStreamGetResource访问 jar 中的文件内容。很明显。对 JAR 中的类文件进行特殊处理(作为字节码)。

我研究了 AWS (用于 Java 的 AmazonWebServiceAPI) ,我看到了三个。Jar 文件,它们是: aws-java-sdk-1.1.1.jar,aws-java-sdk-1.1.1-javadoc.jar,aws-java-sdk-1.1.1-source。罐子

上述包装是相当普遍的。有时人们使用 。罐作为 。压缩的替代文件扩展名。我发现这种做法令人困惑,但它并不罕见,亚马逊在这种情况下就是这样做的。我认为随着 Maven 的启动,这种做法变得越来越普遍,Maven 将引用源代码存储在名为。罐子。

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

Aws-java-sdk-1.1.1-sources.jar -这只是一个包含源代码(。Java 文件)。不需要编译或执行。它可以帮助您解决在使用库时可能遇到的问题。你可以解压这个文件并从你的硬盘读取源代码。但是,您的 IDE 可以通过在主库 JAR 上创建一个“源附件”来直接利用这个文件。通过在 IDE 中设置这个库-> 源代码关联,当您在库类上使用 IDE 的“ Go to Definition”特性时,IDE 将能够显示库的源代码。

Aws-java-sdk-1.1.1-JavaDoc.jar -这只是一个包含库的 JavaDoc 的 zip 文件。同样,对于编译或执行也没有必要。JavaDoc 只是 HTML,因此您可以解压缩这个文件并直接从硬盘读取 JavaDoc HTML。但是,大多数 IDE 都可以在主库中创建一个“ JavaDoc 附件”,这允许您从 IDE 内部为库提取上下文敏感的 JavaDoc。实际上,大多数 IDE 都可以从-sources.jar 动态生成 JavaDoc,所以我很少再使用 JavaDoc jar 了。

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

它通常被称为“向类路径添加 JAR”,但是,是的。无论何时构建或执行类路径,您几乎总是需要通过构建类路径来帮助 Java 找到所有正在使用的 JAR。一般来说,使用 JAR 和类路径比在。NET.例如,Java 没有直接等价于。NET 的“全局程序集缓存”; 同样,普通的 Java 也不会自动加载。工作目录里的罐子。

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

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

这是标准程序,没错。