如何在终端内打开并查看 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