作为实习生,我在项目中使用公司代码,他们通常会向我发送jar
文件。我将它添加到path
中的版本Eclipse
中,通常一切都很好,花花公子。
但是,我很想知道每个类包含什么,当我尝试打开jar
文件中的一个类时,它告诉我需要一个源文件。
这是什么意思?我来自 C / C ++ 背景,所以jar
类似于已编译的.o
文件,我能看到的只是.h
的东西?或者我正在使用的jar
文件中是否有加密的实际代码,因此我无法读取它?
感谢所有答案!
编辑:
谢谢,伙计们,我知道这有点像存档但我很困惑为什么当我尝试打开.class
文件时,我得到了一堆随机字符。当我尝试在C中打开.o
文件时输出相似,所以我只想确定。
谢谢!
答案 0 :(得分:74)
JAR文件实际上只是一个ZIP文件。它可以包含任何东西 - 通常它包含已编译的Java代码(* .class),但有时也包含Java源代码(* .java)。
但是,Java可以被反编译 - 如果开发人员模糊了他的代码,你将无法获得任何有用的类/函数/变量名称。
答案 1 :(得分:48)
但是,我对每个类包含的内容感到好奇,当我尝试打开jar文件中的一个类时,它告诉我需要一个源文件。
jar文件基本上是一个zip文件,包含.class文件和可能的其他资源(以及有关jar本身的元数据)。真的很难将C与Java进行比较,因为Java字节代码比大多数二进制格式保留了更多的元数据 - 但是类文件是编译代码而不是源代码。
如果您使用zip实用程序打开jar文件或运行jar xf foo.jar
,您可以从中提取文件,并查看它们。请注意,您不需要需要 jar文件来运行Java代码 - 类加载器可以直接从文件系统或URL以及jar文件加载类数据。
答案 2 :(得分:16)
了解jar文件包含的最佳方法是执行以下操作:
转到命令行并执行jar tvf jarfilename.jar
答案 3 :(得分:10)
jar
文件是一个zip文件,其中包含一些包含元数据的附加文件。 (尽管扩展名为.jar,但它采用zip格式,任何处理.zip文件的实用程序也能处理.jar文件。)
http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html
Jar文件可以包含任何类型的文件,但它们通常包含应用程序所需的类文件和支持配置文件(属性),图形和其他数据文件。
类文件包含已编译的Java代码,可由Java虚拟机执行。
答案 4 :(得分:6)
JAR代表Java ARchive。它是基于流行的ZIP文件格式的文件格式,用于将许多文件聚合为一个。尽管JAR可以用作通用归档工具,但其开发的主要动机是Java applet及其必需组件(.class文件,图像和声音)可以在单个HTTP事务中下载到浏览器,而不是打开每件作品的新连接。这大大提高了applet加载到网页上并开始运行的速度。 JAR格式还支持压缩,这可以减小文件的大小并进一步缩短下载时间。此外,小程序作者可以对JAR文件中的各个条目进行数字签名,以验证其来源。
答案 5 :(得分:4)
Jar文件包含*.class
形式的已编译Java二进制类,可以通过使用某个开源反编译器对其进行反编译,将其转换为可读.java
类。 jar还有一个可选的META-INF/MANIFEST.MF
告诉我们如何使用jar文件 - 指定其他jar文件来加载jar。
答案 6 :(得分:2)
JD-GUI是一个非常方便的浏览和反编译JAR的工具
答案 7 :(得分:1)
.jar文件类似于.exe文件。 实质上,它们都是可执行的zip文件(不同的zip算法)。
在jar文件中,您将看到文件夹和类文件。每个类文件类似于.o文件,并且是一个已编译的java存档。
如果你想在jar文件中看到代码,请下载一个java反编译器(位于这里:http://java.decompiler.free.fr/?q=jdgui)和一个.jar提取器(7zip工作正常)。
答案 8 :(得分:1)
只需检查aopalliance.jar
文件是否包含.java
个文件而不是.class
个文件。如果是这样,只需解压缩jar文件,然后将其导入eclipse&通过eclipse创建一个jar。它对我有用。
答案 9 :(得分:0)
我觉得有用的东西很多。
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文件。“
答案 10 :(得分:0)
据我所知,Jar文件与Zip相同,但有可执行文件。
如果您在Jar中没有可执行文件,那么它将与Zip文件相同,我的意思是说为什么要去Jar。
由于Jar文件包含可执行文件,因此可以轻松地将它们加载到您的代码中,并轻松转移给其他人使用它。
答案 11 :(得分:0)
Jar(Java Archive)包含.class文件组。
1.创建Jar文件(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
答案 12 :(得分:0)
在学习JAR的过程中,我遇到了这个问题,但是对于像.NET这样的人来说,我无法获得足够的信息,因此,我将提供一些要点来帮助像我这样的人.NET背景。
首先,我们需要在.NET中定义与JAR类似的概念,即 Assembly ,并且Assembly与Java JAR文件有很多共同点。
因此,程序集是.NET环境中代码打包的基本单元。程序集是自包含的,通常包含编译类的中间代码,有关这些类的元数据以及打包的代码执行其任务所需的任何其他文件。由于程序集是代码打包的基本单元,因此必须在程序集级别执行与类型交互相关的若干操作。 例如,安全性权限的授予,代码部署和版本控制是在程序集级别完成的。
Java JAR 文件在Java中执行相似的任务,但实现上的最大不同。程序集通常存储为 EXE或DLL ,而JAR文件则存储为 ZIP 文件格式。