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

时间:2010-12-10 16:30:57

标签: c# java

我现在正在学习Java,并且我花了很多时间使用.NET,所以当我想导出或导入库时,它们通常是.dll格式,在.Net环境中称为汇编,它们是编译为IL,他们可以通过任何方式获得图像,xml,音频和儿子等资源。

我也想知道Java中的相同过程。我已经阅读了文件,但他们实际上对我有点困惑,并澄清了我需要你帮助的人。

问题:

  1. .NET Assembly与java .jar?
  2. 是一回事
  3. .dll包含已编译的IL代码,.jar包含已编译的.class /字节代码文件?
  4. 他们说资源,我们在这里谈论什么样的资源?图像,.txt文件等等或所有这些都可能吗?

  5. 我检查了AWS(适用于java的Amazon Web Service API),我看到了三个.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
  6. 它们包含.class文件 - html格式的java文档和仍未编译的.java文件。所以我意识到.jar不仅包括编译的字节代码(.class)以及其他内容。

    1. 当我想导入java库时,我是否总是需要导入.jar文件?
    2. 当我想导出自己的java库时,我是否需要导出.jar文件。
    3. 提前感谢您的帮助。

3 个答案:

答案 0 :(得分:79)

.NET程序集是否与java .jar相同?

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

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

是。虽然JAR只是zip文件(你可以在你最喜欢的Zip工具中打开它们),所以它们几乎可以包含任何东西。

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

JAR中允许任何文件类型。您的Java代码可以通过例如getResourceAsStreamgetResource访问jar中文件的内容。显然,JAR中的.class文件是专门处理的(作为字节码)。

我检查了AWS(Amazon的Amazon Web Service API),我看到了三个.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都可以从-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文件

这是标准的,是的。

答案 1 :(得分:8)

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

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

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


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

答案 2 :(得分:7)

回答这个具体问题。

  
      
  1. AWS-java的SDK-1.1.1.jar
  2.   
  3. AWS-java的SDK-1.1.1- javadoc.jar
  4.   
  5. AWS-java的SDK-1.1.1- sources.jar
  6.   

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

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

For 1)如果你需要使用jar文件中的类,那么你需要将该jar导入到你的项目中。

2)你不需要。您可以将依赖项包装到您的库中,或者将每个包装到自己的jar中并将它们导入到您的项目中。

  1. .NET程序集与java .jar相同? 答案:是的。
  2. .dll包含已编译的IL代码,而.jar包含已编译的.class / byte代码文件? 答案: .jar文件是java资源,类,图像/图标等的归档文件。这对于应用程序是必需的,就像在.DLL中一样。类文件包含编译java源代码(称为java字节码)。