Saya perlu membaca file manifes Maven MANIFEST.MF dari "some.jar" menggunakan bash
bash
jar
manifest.mf
Roma
sumber
sumber
Jawaban:
-q
akan menekan keluaran verbose dari program unzip-c
akan mengekstrak ke stdoutContoh:
Atau Anda dapat menggunakan
-p
bukan-q -c
.sumber
penggunaan
unzip
:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
yang diam-diam akan (
-q
) membaca jalur META-INF / MANIFEST.MF dari jarfile (yang dikompresi menggunakan format zip) ke stdout (-c
). Anda kemudian dapat menyalurkan output ke perintah lain untuk menjawab pertanyaan seperti 'apa kelas utama untuk jar ini:$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
(ini menghapus semua baris yang tidak berisi string
Main-Class
, lalu memisahkan baris di:
, hanya menyimpan bidang kedua, nama kelas). Tentu saja, tentukan dengan$JARFILE_PATH
tepat atau ganti$JARFILE_PATH
dengan jalur ke jarfile yang Anda minati.sumber
Bergantung pada distribusi Anda, instal
unzip
paket. Kemudian cukup keluarkanIni akan membuang konten ke STDOUT.
HTH
sumber
Orang lain telah memposting tentang penggunaan unzip -p dan piping ke grep atau awk atau apapun yang Anda butuhkan. Meskipun itu berfungsi untuk sebagian besar kasus, perlu dicatat bahwa karena batas MANIFEST.MF 72 karakter per baris, Anda mungkin mencari kunci yang nilainya dibagi menjadi beberapa baris dan oleh karena itu akan sangat sulit untuk diurai. Saya ingin melihat alat CLI yang benar-benar dapat menarik nilai yang diberikan dari file.
http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html
sumber
$ tar xfO some.jar META-INF/MANIFEST.MF
x
ekstrak danO
dialihkan ke stdout.Catatan: Sepertinya hanya bekerja di bsdtar, bukan GNU tar.
sumber
Skrip Groovy berikut menggunakan API Java untuk mengurai manifes, menghindari masalah dengan pemutusan baris aneh format manifes:
#!/usr/bin/env groovy for (arg in args) { println("[$arg]") jarPath = new java.io.File(arg).getAbsolutePath() jarURL = new java.net.URL("jar:file:" + jarPath + "!/") m = jarURL.openConnection().getManifest() m.getMainAttributes().each { k, v -> println("$k = $v") } }
Teruskan file JAR sebagai argumen:
Atau jika Anda sangat membutuhkan satu baris:
groovy -e 'new java.net.URL("jar:file:" + new java.io.File(args[0]).getAbsolutePath() + "!/").openConnection().getManifest().getMainAttributes().each { k, v -> println("$k = $v") }' ~/.m2/repository/junit/junit/4.13/junit-4.13.jar
sumber