web-dev-qa-db-ja.com

Bashを使用してJARからMANIFEST.MFファイルを読み取る方法

Bashを使用して「some.jar」からMANIFEST.MF mavenマニフェストファイルを読み取る必要があります

76
Roman
$ 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パイプにファイルを抽出(stdout)。ファイルデータ以外は何もstdoutに送信されず、ファイルは常に格納されている(変換なし)ので、常にバイナリ形式で抽出されます。

140
miku

unzipを使用:

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

静かに(-q)jarファイル(Zip形式で圧縮されている)からstdout(-c)へのパスMETA-INF/MANIFEST.MFを読み取ります。その後、出力を他のコマンドにパイプして、「このjarのメインクラスは何か」などの質問に答えることができます。

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

(これは、文字列Main-Classを含まないすべての行を削除し、:で行を分割し、2番目のフィールドであるクラス名のみを保持します)。もちろん、$JARFILE_PATHを適切に定義するか、$JARFILE_PATHを目的のjarfileへのパスに置き換えます。

16
Bobby Powers

ディストリビューションに応じて、unzipパッケージをインストールします。次に、単に発行する

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

これにより、内容がSTDOUTにダンプされます。

HTH

4
Zsolt Botykai

他の人は、unzip -pを使用してgrepやawkなどのパイピングを必要としていることを投稿しています。これはほとんどの場合に機能しますが、MANIFEST.MFの1行あたりの文字数が72文字に制限されているため、値が複数の行に分割されているために解析が非常に難しいことに注意してください。実際にレンダリングされた値をファイルから引き出すことができるCLIツールが見たいです。

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

1
Justin Clayton

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

xは抽出し、Oはstdoutにリダイレクトします。

注:bsdtarでのみ動作し、GNU tar。

1
rlovtang