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

现在我正在学习Java,而且我花了很多时间在.NET上,所以当我想导出或导入库时,通常都是以.dll格式在.Net环境中调用assembly,并将它们编译为IL他们可以有任何方式的资源,如图像,XML,audio和儿子。

我想知道在Java中同样的过程。 我已经阅读过文件,但他们实际上把我弄糊涂了,澄清一些事情,我需要你们的帮助。

问题:

  1. .NET程序集与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文件。

提前感谢您的帮助。

.NET程序集和java .jar是一样的吗?

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

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

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

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

在JAR中允许任何文件types。 您的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创build“源附件”来直接使用此文件。 通过在您的IDE中设置此库 – >源关联,当您在库类中使用IDE的“转到定义”function时,IDE将能够向您显示库的源代码。

aws-java-sdk-1.1.1-javadoc.jar – 这只是一个包含JavaDoc库的zip文件。 再一次,编译或执行不是必须的。 JavaDoc只是HTML,所以你可以解压这个文件并直接从你的硬盘读取JavaDoc HTML。 但是,大多数IDE可以为主库创build一个“javadoc附件”,这允许您从IDE中为库启动上下文敏感的JavaDoc。 实际上,大多数IDE可以从-sources.jar中快速生成JavaDoc,所以我很less再使用javadoc jar。

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

通常被称为“将JAR添加到类path”,但是。 您几乎总是需要通过构build类path来帮助Javafind所有您正在使用的JAR,无论您何时创build或执行。 一般来说,使用JAR和类path比使用.NET中的DLL更为手动和明确。 例如:Java没有.NET的“全局程序集caching”的直接等价物。 也香草Java不会自动加载工作目录中的.jars。

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

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

这是标准的,是的。

我可以回答这个问题的一部分 🙂

据我所知,一个jar只是一个“Java Archive”文件。 它可以包含任何你想要的,但最常用来分发库的二进制版本。 它也可以用于分发可执行文件 – 双击一个JAR文件将启动应用程序,如果这是如何打包的。

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


编辑:例如,我刚刚下载JAI 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

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

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

对于1)如果您需要使用在jar文件中find的类,那么您需要将该jar导入到您的项目中。

对于2)你不需要。 你可以将你的依赖库打包到你的库中,或者把它们打包到它们自己的jar中,并把它们导入到你的项目中。

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