使用终端打开 jar 文件中的文件?

Kur*_*rru 6 gnome-terminal zip

如何从终端中打开和查看 jar 文件中的文件?

我可以使用 less 打印出 jar 文件中的所有文件,但是如何打开这些文件?

Ill*_*Ace 5

我个人使用,jar因为它感觉更自然,并且还允许其他操作,例如更新内容。下面是读取命令:

列表内容

jar tf myjar.jar

提取内容到密码

jar xf myjar.jar

提取特定文件,根据需要创建目录

jar xf myjar.jar /foo/bar.class

不过,提取字节码本身通常不是很有用。为了理解它,你需要将它反编译成可读的东西。

没有很多好的 Java 反编译器可供选择。我倾向于使用JD-GUI,因为它很快并且可以满足我的需要。令人沮丧的是,它的多文件搜索功能从来不适合我(注意 Ctrl+F 搜索页面很好)。不过,这并不是什么大损失;您可以使用 Ctrl+Alt+S 将所有源转储到磁盘,以便使用 grep/vim/Eclipse 等进行细读。

我是这样安装的:

wget http://jd.benow.ca/jd-gui/downloads/jd-gui-0.3.5.linux.i686.tar.gz
tar xzf jd-gui-0.3.5.linux.i686.tar.gz
sudo mv jd-gui /usr/local/bin/
sudo chown root:root /usr/local/bin/jd-gui
sudo chmod 755 /usr/local/bin/jd-gui
Run Code Online (Sandbox Code Playgroud)

使用它是这样的:

jd-gui myjar.jar
Ctrl+Alt+S; pick your path & save
Alt+F4
jar xf <path>/myjar.src.zip 
Run Code Online (Sandbox Code Playgroud)

但是请注意,JD-GUI 没有 CLI 界面。如果你知道一个好的 CLI 反编译器,我会很感兴趣听到它(有 JAD,但 AFAIK 只支持 Java < 1.5)。


Jef*_*eff 4

使用 unzip,您可以将文件从存档传输到 stdout,然后传输到其他内容来读取它,例如:

unzip -p /path/to/some.jar path/to/file/inside/jar | less
Run Code Online (Sandbox Code Playgroud)

默认情况下不会安装从内存中解压缩,因此您可能需要:

sudo apt-get install unzip
Run Code Online (Sandbox Code Playgroud)

杰夫


str*_*ngs 1

jar 文件实际上只是 zip 文件,您可以通过这样做来测试它。

file foo.jar
Run Code Online (Sandbox Code Playgroud)

因此列出您可以简单执行的文件。

unzip -l foo.jar
Run Code Online (Sandbox Code Playgroud)

要访问这些文件,只需使用以下命令解压缩文件即可

unzip foo.jar
Run Code Online (Sandbox Code Playgroud)

如果您只想提取一个文件,则将文件附加到后面

unzip foo.jar some/path/in/jar/bar.class
Run Code Online (Sandbox Code Playgroud)

确保使用 -l 中的完整路径。请记住,它将在本地创建相同的路径。