查看.jar​​文件的内容


226

在jar文件中查看类,方法,属性等的最简单方法是什么?我正在寻找与非常有用的Lutz Roeder .NET Reflector等效的东西-适用于Java


12
你为什么不接受答案?
Sanghyun Lee

4
@HughLee这个问这个的人是8年前问的。这就是为什么答案达到100个投票后就需要自动接受的原因IMO
Kolob

@KolobCanyon是真实的,但他们在回答这一问题的同一天提交了最高评价的答案
Pranav A.

1
答案来自:https : //superuser.com/a/808938/1045397您可以使用vim来完成vim file_name.jar
字节曼巴

Answers:


280

使用JDK,jar -tf将列出jar中的文件。javap将为您提供来自特定类文件的更多详细信息。


3
@salvob不需要连字符,因为tar使用强制性选项后不需要连字符。
汤姆·霍顿-大头钉

2
仅供参考,您可能需要C:\Program Files\Java\jdk<version>\bin先将其添加到系统或用户PATH环境变量中,然后才能jar用作系统命令。(其中<version>是您的jdk版本内部版本号。请检入C:\Program Files\Java
Tezra

1
javap示例:javap -classpath test.jar com.yourpackage.HelloWorld
mPrinC

要查看非类文件(如清单)的内容,您需要执行以下操作:tar -xOzf test.jarjar tf test.jar | grep MANIFEST
mPrinC

55

我通常使用7-Zip打开它们。它至少允许查看包,类和资源。
如果我需要查看方法或字段,可以使用Jad,但是当然,最好依靠(好的)JavaDoc ...

现在,在SO的某处提到了一些Eclipse插件,以查找类位于哪个jar文件中,也许它们可以做更多的事情(即,您的要求)。

[编辑]对SO线程的引用。不是问什么,而是以某种方式相关,因此很有用:Java:在给定类名的情况下,我如何知道要使用哪个jar文件?


放置URL时,指向Jad网站的链接已被删除。仍然可以在web.archive.org/web/20080106184313/http://www.kpdus.com/上找到它,但是无论如何Jad今天已经过时了。
PhiLho

35

我个人使用的是JD-GUI。它是一个免费的“反编译器”,因为它使您可以查看源代码,类和类中的对象,以及在左侧的树形菜单中查看文件结构。但是,它不允许您直接修改类。

JD-GUI的网站:http : //jd.benow.ca/


这可以跨平台工作,而另一个答案中提到的7-Zip是Windows特定的。
布拉德·库皮

我在OS X上使用了Archive Utility,工作正常。无论平台如何,大多数(un)zip实用程序都应该可以工作。
Greenonline

23

如果有人还不知道,JAR文件就是一个ZIP文件,其中包含程序的类,资源等以及一些元数据。您可以提取其中一个以查看其组合方式。

因此,我使用的unzip命令很容易记住和使用。

unzip -l <jar-file-name>.jar

举例来说,如果你有一个jar文件与名称test.jar,然后unzip -l test.jar将列出的jar文件的所有内容。

尽管所有其他答案都不错,但在大多数答案中,您将必须使用某些软件,例如7 zipJDK或其他某些eclipse工具,而这并不需要您拥有任何较大的软件,并且它在Linux中是默认提供的和Mac,因此非常轻巧且易于使用

您也可以使用zipinfo <your jar file>。如果您的操作系统支持此功能。


1
@Boop感谢您的建议。将它添加到我的答案
OPSTER Elasticsearch忍者

1
如果文件浏览器支持zip,则也可以将jar重命名为.zip(例如,在Windows上)
Rhayene

16

方法名称,字段等

通过将一个jar添加到IDE中的项目中,通常可以看到方法和字段名称,而不能看到详细的实现。NetBeans可以(可能是Eclipse,也可以是IntelliJ)做到这一点。您可以直接在IDE中浏览jar结构。

只是内容

对于诸如查看内容之类的任何事情,您都可以使用:

  • jar tvf jarfile.jar
  • Winzip或任何zip工具

源代码

要访问源代码,您将使用反编译器(例如JAD或其前端之一)或另一个反编译器。如果代码被混淆,则...



7
jar -tvf file_name.jar

上面只会打印文件名

要查看文件的内容,可以通过以下方式将文件提取到文件夹中

jar -xvf file_name.jar

这将解压缩jar文件并将内容放在您运行此文件的目录中。

或者在Windows中,将.jar文件重命名为.zip,然后您可以解压缩以提取并查看jar文件的内容。由于jar在内部是一个zip文件。


6

使用WinRar。它将以完整的方式为您打开文件夹结构。还可以在保留路径的同时进行存档内编辑。

毕竟,JAR文件仅是一个ZIP存档。


6

如果您想查看内部内容,只需在下面将其重命名为第一个选项即可。

  1. F2 & Rename to jarfile.zip //使用任何解压缩...

  2. jar tvf jarfile.jar

  3. jar tf jarfile.jar


5

如果我理解正确,那么您不仅希望看到类,而且还希望看到方法,属性等。我知道唯一可以执行此操作的工具是Eclipse-如果将jar添加到项目类路径中,则可以使用常规的包资源管理器浏览带有方法和属性的类。

无论如何,这是一个好的独立Java工具的好主意


请注意,该jar需要位于“ Referenced library”文件夹中,而不仅仅是“ libs”中。对于Apache Commons库,您不浏览source.jar,而是浏览原始库,然后在Eclipse询问时附加源。
Noumenon

4

Jad笨拙,不再维护。我已切换到“ Java Decompiler”,它具有一个漂亮的UI并支持新的语言功能。

但是,我使用的每个反编译器都会遇到无法成功反编译的代码。对于这些,有助于理解标准JDK工具javap产生的反汇编Java字节代码。


3

嗯,一个jar文件只是一个zip文件,因此,如果将其解压缩(使用自己喜欢的解压缩工具),则将所有文件都保存在其中。

如果要查看类文件以查看方法,则需要一个工具。正如PhiLho所提到的,Eclipse能够做到这一点(默认情况下),我想大多数Java IDE都可以做到这一点。


3

在Eclipse 3.4中

  1. 将有问题的jar文件拖到Java项目中。将显示jar文件的副本。
  2. 右键单击jar文件,然后选择“构建路径”->“添加到构建路径”。
  3. Jar文件将移至“参考库”节点,可以在其中打开它并在“项目资源管理器”窗格中进行导航。

如果也看到源代码是一个问题,请打开一个新问题。

为了在Jar文件级别(作为zip文件)进行导航,我使用了7zip,它工作得很好,并允许查看和编辑条目,这对于解决问题非常有用。


3

一种方法是在“ Package Explorer”中打开透视图。这样做,您可以看到带有类详细信息的jar的结构。为此,使用包资源管理器检查项目中的库文件夹。

窗口>>显示视图>>其他>> Java >> Package Explorer

另一种方法是,您可以将JarPlug用作eclipse插件。这在eclipse / springsource中有效

http://jar-plug.sourceforge.net/


3

如果您在Windows中并使用Powershell,并且正在jar中寻找文件,则可以执行以下操作:

jar -tf .\[JAR_NAME] | where {$_ -match "[FILENAME]"}

2

如今,您可以使用大多数解压缩实用程序打开它们,然后,如果要查看源代码,只需获取DJ Java Decompiler之类的内容。



2

我的要求是在jar中查看文件(如属性文件)的内容,而无需实际提取jar。如果有人像我一样到达此线程,请尝试以下命令-

unzip -p myjar.jar myfile.txt

这对我来说很好!




1

Eclipse 3.4 JDT

这不是最快的方法,因为您必须先将其拖入日食。但是,即使启用了反编译,您也将具有完整的Java类浏览功能。


1

我已将Windows中的默认操作设置为“使用WinZip打开”。这使得将JAR作为归档进行管理变得容易。您甚至可以手动添加/删除文件。


1

这个Jar Explorer足够好。
支持三种反编译器类型:JD,Procyon和Fernflower。
允许搜索任何Java归档文件中的文件和重复项。
用户还可以通过D&D文件修改jar,并编辑一些非类文件。 在此处输入图片说明 在此处输入图片说明


请不要仅仅发布一些工具或库作为答案。至少要在答案本身中证明它是如何解决问题的。
Das_Geek


0

您的IDE也应支持此功能。我的IDE(SlickeEdit)称它为“标签库”。只需为jar文件添加一个标记库,您就应该能够以分层方式浏览类和方法。






By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.