如何使用Bash从JAR读取MANIFEST.MF文件

Rom*_*man 79 bash jar manifest.mf

我需要使用bash从"some.jar"读取MANIFEST.MF maven清单文件

mik*_*iku 144

$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)
  • -q 将压缩解压缩程序的详细输出
  • -c 将提取到stdout

例:

$ unzip -q -c commons-lang-2.4.jar META-INF/MANIFEST.MF

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_13-119 (Apple Inc.)
Package: org.apache.commons.lang
Extension-Name: commons-lang
Specification-Version: 2.4
Specification-Vendor: Apache Software Foundation
Specification-Title: Commons Lang
Implementation-Version: 2.4
Implementation-Vendor: Apache Software Foundation
Implementation-Title: Commons Lang
Implementation-Vendor-Id: org.apache
X-Compile-Source-JDK: 1.3
X-Compile-Target-JDK: 1.2
Run Code Online (Sandbox Code Playgroud)

或者你可以用-p而不是-q -c.

-p将文件解压缩到管道(stdout).除了将文件数据发送到stdout之外,文件总是以二进制格式提取,就像它们被存储一样(没有转换).

  • 我知道这个线程很旧,但它可能会关注谁:从手册中可以看出,使用 -p 或 -c 提取将以二进制形式打印输出。如果您需要以某种方式解析此输出(例如到关联数组),您应该使用 -aa 参数强制文本表示,以使其正确。 (2认同)

Bob*_*ers 17

用途unzip:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)

这将安静地(-q)从jar文件(使用zip格式压缩)读取路径META-INF/MANIFEST.MF到stdout(-c).然后,您可以将输出传递给其他命令,以回答诸如"此jar的主要类是什么:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
Run Code Online (Sandbox Code Playgroud)

(这将删除所有不包含该字符串Main-Class的行,然后将该行拆分为:,仅保留第二个字段,类名).当然,要么$JARFILE_PATH适当地定义,要么替换$JARFILE_PATH你感兴趣的jar文件的路径.