【问题标题】:Difference between .jar and .dll file.jar 和 .dll 文件之间的区别
【发布时间】:2011-05-23 14:24:11
【问题描述】:

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

我也想知道 Java 中的相同过程。我已经阅读了文档,但它们实际上让我有些困惑,为了澄清问题,我需要你们的帮助。

问题:

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

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

  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 文件。

提前感谢您的帮助。

【问题讨论】:

  • 我自己也一直在想这个,希望我能给予更多的支持!!!
  • 我正好相反。在 Java 之后的这些天里,我正在学习 .NET。

标签: c# java


【解决方案1】:

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

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

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

是的。虽然 JAR 只是 zip 文件(您可以使用自己喜欢的 Zip 工具打开它们),但它们实际上可以包含任何内容。

他们说资源,我们这里说的资源是什么?图片、.txt 文件等或所有这些都是可能的?

JAR 中允许使用任何文件类型。您的 Java 代码可以通过例如getResourceAsStreamgetResource 访问 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 的推出,这种做法变得更加普遍,它将参考源代码存储在名为 .jar 的文件中。

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

aws-java-sdk-1.1.1-sources.jar - 这只是一个 zip 文件,其中包含库的源代码(.java 文件)。它不是编译或执行所必需的。提供它是为了帮助您解决使用库时可能遇到的问题。您可以解压缩此文件并从硬盘读取源代码。但是,您的 IDE 可能可以通过创建主库 JAR 的“源附件”直接使用此文件。在您的 IDE 中设置此库->源关联后,当您在库类上使用 IDE 的“转到定义”功能时,您的 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 中使用 DLL 更加手动和显式的过程。例如,Java 没有直接等效于 .NET 的“全局程序集缓存”; vanilla Java 也不会自动从工作目录加载 .jars。

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

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

这是标准的,是的。

【讨论】:

  • 这是一个很好的解释。非常感谢:)
  • 我会在最后一部分添加关于 using JARs and classpaths is a much more manual and explicit process 的内容——这就是为什么像 Maven 这样的工具如此必要的原因,如果只是用于依赖管理......处理所有依赖的非 JRE JAR 真的很痛苦
【解决方案2】:

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

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

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


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

【讨论】:

    【解决方案3】:

    回答这个具体问题。

    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

    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字节码)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2022-10-04
      • 2019-07-04
      • 2013-12-14
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多