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

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

如何在终端内打开并查看 jar 文件中的文件?

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

答案1

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

列表内容

jar tf myjar.jar

提取内容到 pwd

jar xf myjar.jar

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

jar xf myjar.jar /foo/bar.class

不过,提取字节码本身通常没什么用。要理解它,您需要将其反编译为可读的内容。

没有太多好的 Java 反编译器可供选择。我倾向于使用京东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

它的使用方式如下:

jd-gui myjar.jar
Ctrl+Alt+S; pick your path & save
Alt+F4
jar xf <path>/myjar.src.zip 

但请注意,JD-GUI 没有 CLI 界面。如果您知道一个好的 CLI 反编译器,我会非常感兴趣(有 JAD,但据我所知,它仅支持 Java < 1.5)。

答案2

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

unzip -p /path/to/some.jar path/to/file/inside/jar | less

从内存中解压缩不是默认安装的,因此您可能需要:

sudo apt-get install unzip

杰夫

答案3

jar 文件实际上只是 zip 文件,您可以通过执行此操作来测试。

file foo.jar

因此要列出文件你就可以轻松做到。

unzip -l foo.jar

要访问文件,只需使用以下方法解压缩文件

unzip foo.jar

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

unzip foo.jar some/path/in/jar/bar.class

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

答案4

我总是定义一个函数来执行此操作:

vijar () 
{ 
    unzip -p $1 $2 | vi -
}

使用方法:

vijar jarfilename.jar path/file_to_view

相关内容