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

我需要使用bash从“some.jar”读取MANIFEST.MF maven manifest文件

$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF 
  • -q会压缩unzip程序的详细输出
  • -c将提取到标准输出

例:

 $ 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 

或者,您可以使用-p而不是-q -c

-p提取文件到pipe道(stdout)。 只有文件数据发送到标准输出,并且文件始终以二进制格式提取,就像存储(不进行转换)一样。

使用unzip

 $ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF 

-q )从jarfile(使用zip格式压缩)读取META-INF / MANIFEST.MF到stdout( -c )。 然后,您可以将输出传递给其他命令来回答问题,例如“这个jar的主要类是什么:

 $ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2 

(这将删除所有不包含stringMain-Class的行,然后拆分行,仅保留第二个字段,类名)。 当然,要么适当地定义$JARFILE_PATH ,要么将$JARFILE_PATHreplace$JARFILE_PATH您感兴趣的$JARFILE_PATH的path。

根据您的发行版,安装unzip软件包。 然后简单地问题

 unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF 

这会将内容转储到STDOUT。

HTH

其他人一直在张贴使用unzip -p和pipe道grep或awk或任何你需要的。 虽然这在大多数情况下都适用,但值得注意的是,由于MANIFEST.MF每行72个字符的限制,您可能会对其值在多行上分割的键进行精选,因此将很难进行parsing。 我很想看到一个CLI工具,它实际上可以从文件中提取一个渲染值。

http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html

$ tar xfO some.jar META-INF/MANIFEST.MF

x提取和Oredirect到stdout。

注意:似乎只能在bsdtar而不是GNU tar中工作。