Bash kullanarak MANIFEST.MF maven bildirim dosyasını "some.jar" dan okumam gerekiyor
Yanıtlar:
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
-q
unzip programından ayrıntılı çıktıyı bastırır-c
standart çıktıya çıkarılacakMisal:
$ 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
Alternatif olarak -p
yerine kullanabilirsiniz -q -c
.
-p dosyaları boruya çıkart (stdout). Dosya verileri dışında hiçbir şey stdout'a gönderilmez ve dosyalar her zaman depolandıkları gibi (dönüştürme yapılmadan) ikili biçimde çıkarılır.
kullanım unzip
:
$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
Bu, sessizce ( -q
) META-INF / MANIFEST.MF yolunu jar dosyasından (zip formatı kullanılarak sıkıştırılır) stdout ( -c
) 'a okuyacaktır . Ardından, 'bu kavanozun ana sınıfı nedir:' gibi soruları yanıtlamak için çıktıyı başka bir komuta aktarabilirsiniz.
$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
(bu, dizeyi içermeyen tüm satırları kaldırır ve Main-Class
ardından satırı böler, :
yalnızca ikinci alanı, sınıf adını korur). Elbette, ya $JARFILE_PATH
uygun şekilde tanımlayın ya da $JARFILE_PATH
ilgilendiğiniz bir jar dosyasına giden yolu değiştirin .
Dağıtımınıza bağlı olarak unzip
paketi kurun . O zaman basitçe yayınlayın
unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF
Bu, içeriği STDOUT'a aktaracaktır.
HTH
Diğerleri, grep veya awk ya da ihtiyacınız olan her şeye unzip -p ve piping kullanma hakkında yayın yapıyor. Bu çoğu durumda işe yarasa da, MANIFEST.MF'nin satır başına 72 karakter sınırı nedeniyle, değerleri birden çok satıra bölünmüş anahtarlar için grepping yapıyor olabileceğinizi ve bu nedenle ayrıştırmanın çok zor olacağını belirtmek gerekir. Dosyadan işlenmiş bir değeri gerçekten çekebilen bir CLI aracı görmeyi çok isterim.
http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html
Aşağıdaki Groovy komut dosyası, bildirimi ayrıştırmak için Java'nın API'sini kullanır ve bildirim biçiminin garip satır kırmalarıyla ilgili sorunları önler:
#!/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") }
}
JAR dosyalarını bağımsız değişken olarak iletin:
$ 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
Veya tek satırlık bir adam için çaresizseniz:
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