什么是一个jar文件包含?

作为一名实习生,我在项目中使用公司代码,他们通常会给我一个jar文件来处理。 我将它添加到Eclipse的构buildpath ,通常都很好,很棒。

然而,我很好奇知道,每个类包含什么,当我尝试打开jar文件中的一个类时,它告诉我需要一个源文件。

这是什么意思? 我来自一个C / C + +的背景,所以是一个类似于已经编译的.o文件的jar ,所有我能看到的是.h东西? 或者是有我使用的jar文件中的实际代码encryption,所以我不能读取它?

感谢所有的答案!

编辑:
谢谢,伙计们,我知道它就像一个档案,但是我很困惑,为什么当我试图打开.class文件时,我得到了一堆随机字符。 当我试图在C中打开一个.o文件时,输出是相似的,所以我只是想确认一下。
谢谢!

JAR文件实际上只是一个ZIP文件。 它可以包含任何东西 – 通常包含已编译的Java代码(* .class),但有时也包含Java源代码(* .java)。

但是,Java可以被反编译 – 如果开发人员混淆了他的代码,你将不会得到任何有用的类/函数/variables名称。

然而,我很好奇每个类包含什么,当我尝试打开jar文件中的一个类时,它告诉我需要一个源文件。

一个jar文件基本上是一个包含.class文件和可能的其他资源(以及有关jar本身的元数据)的zip文件。 实际上很难将C与Java进行比较,因为Java字节代码比大多数二进制格式维护更多的元数据 – 但类文件编译代码而不是源代码。

如果您使用zip实用程序打开jar文件,或者运行jar xf foo.jar ,则可以从中提取文件,然后查看它们。 请注意,您不需要 jar文件来运行Java代码 – 类加载器可以直接从文件系统,URL或jar文件加载类数据。

了解jar文件包含的最好方法是通过执行此操作:

转到命令行并执行jar tvf jarfilename.jar

jar文件是一个带有一些包含元数据的附加文件的zip文件。 (尽pipe.jar扩展名是zip格式,所有处理.zip文件的工具也能处理.jar文件)。

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Jar文件可以包含任何types的文件,但是它们通常包含应用程序所需的类文件和支持的configuration文件(属性),graphics和其他数据文件。

类文件包含已编译的Java代码,可由Java虚拟机执行。

http://en.wikipedia.org/wiki/Java_class_file

JAR代表Java归档。 这是基于stream行ZIP文件格式的文件格式,用于将多个文件合并为一个文件。 虽然JAR可以作为一个通用的归档工具,但其开发的主要动机是Java applet及其必需的组件(.class文件,图像和声音)可以在单个HTTP事务中下载到浏览器中,而不是打开每件作品都有一个新的连接。 这大大提高了一个小程序可以加载到网页上的速度,并开始运作。 JAR格式还支持压缩,从而减小文件的大小,并进一步缩短下载时间。 此外,小程序作者可以对JAR文件中的单个条目进行数字签名,以validation其来源。

Jar文件包含以*.classforms编译的Java二进制类,可以使用一些开源反编译器将其转换为可读的.java类。 该jar还有一个可选的META-INF/MANIFEST.MF ,告诉我们如何使用jar文件 – 指定其他的jar文件来加载jar。

JD-GUI是浏览和反编译JAR的一个非常方便的工具

.jar文件类似于.exe文件。 实质上,它们都是可执行的zip文件(不同的zipalgorithm)。

在一个jar文件中,您将看到文件夹和类文件。 每个类文件都与.o文件相似,并且是一个已编译的Java归档文件。

如果你想看到一个jar文件中的代码,下载一个Java反编译器(位于这里: http ://java.decompiler.free.fr/?q=jdgui)和.jar提取器(7zip工作正常)。

只要检查aopalliance.jar文件是否具有.java文件而不是.class文件。 如果是的话,只需提取jar文件,将其导入到eclipse中,并通过eclipse创build一个jar文件。 它为我工作。

.jar文件包含与该代码相关的编译代码(* .class文件)和其他数据/资源。 它使您能够将多个文件捆绑到一个归档文件中。 它还包含元数据。 由于它是一个压缩文件,它能够压缩你放入它的数据。

几件事情我觉得有用。

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

OSGi实际上将JAR文件定义为:“JAR是基于ZIP文件格式的归档文件,允许将多个文件合并为一个文件,通常包含在归档文件中的文件是已编译的Java类文件和资源的混合文件,如图像和文档,另外,规范定义了一个JAR归档文件中的元数据标准位置–META-INF文件夹 – 以及其中最重要的是MANIFEST.MF文件中的几个标准文件名和格式。

根据我的理解,Jar文件与Zip相同,但具有可执行文件。

如果你没有在Jar中的可执行文件,那么它将与Zip文件相同,我的意思是说为什么去jar子。

由于Jar文件具有可执行文件,因此它们可以轻松加载到您的代码中,并轻松转移到其他人使用它。

Jar(Java Archive)包含一组.class文件。

1.创buildJar文件(Zip文件)

  if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it's not feasible for only one .class file) if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class 

2.提取Jar文件(解压缩文件)

  jar -xvf NameOfJarFile.jar 

3.显示内容表

  jar -tvf NameOfJarFile.jar