Saya perlu membaca file manifes Maven MANIFEST.MF dari "some.jar" menggunakan bash
Jawaban:
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
-q
akan menekan keluaran verbose dari program unzip-c
akan mengekstrak ke stdoutContoh:
$ 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
Atau Anda dapat menggunakan -p
bukan -q -c
.
-p ekstrak file ke pipa (stdout). Tidak ada apapun kecuali data file yang dikirim ke stdout, dan file tersebut selalu diekstraksi dalam format biner, sama seperti mereka disimpan (tanpa konversi).
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.
Bergantung pada distribusi Anda, instal unzip
paket. Kemudian cukup keluarkan
unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF
Ini akan membuang konten ke STDOUT.
HTH
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
$ tar xfO some.jar META-INF/MANIFEST.MF
x
ekstrak dan O
dialihkan ke stdout.
Catatan: Sepertinya hanya bekerja di bsdtar, bukan GNU tar.
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:
$ groovy manifest.groovy ~/.m2/repository/junit/junit/4.13/junit-4.13.jar
[/Users/curtis/.m2/repository/junit/junit/4.13/junit-4.13.jar]
Implementation-Title = JUnit
Automatic-Module-Name = junit
Implementation-Version = 4.13
Archiver-Version = Plexus Archiver
Built-By = marc
Implementation-Vendor-Id = junit
Build-Jdk = 1.6.0_65
Created-By = Apache Maven 3.1.1
Implementation-URL = http://junit.org
Manifest-Version = 1.0
Implementation-Vendor = JUnit
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