मुझे बैश का उपयोग करके "some.jar" से मैनिफेस्ट.एमएफ मेवेन मेनिफेस्ट फाइल पढ़ने की जरूरत है
जवाबों:
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
-q
अनज़िप प्रोग्राम से वर्बोज़ आउटपुट को दबाएगा-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
।
पाइप (stdout) के लिए -p निकालने की फ़ाइलें। कुछ भी नहीं लेकिन फ़ाइल डेटा को स्टडआउट के लिए भेजा जाता है, और फाइलें हमेशा द्विआधारी प्रारूप में निकाली जाती हैं, जैसे कि वे संग्रहीत हैं (कोई वार्तालाप नहीं)।
उपयोग unzip
:
$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF
वह चुपचाप ( -q
) जोराफाइल (जो ज़िप प्रारूप का उपयोग कर संकुचित है) से stdout करने के लिए (META-INF / MANIFEST.MF पथ को पढ़ें -c
)। फिर आप अन्य कमांड के लिए आउटपुट को पाइप कर सकते हैं जैसे कि 'इस जार के लिए मुख्य वर्ग क्या है: "
$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2
(यह उन सभी लाइनों को हटा देता है जिनमें स्ट्रिंग नहीं होती है Main-Class
, फिर :
केवल दूसरी फ़ील्ड, वर्ग नाम रखते हुए लाइन को विभाजित करता है )। बेशक, या तो $JARFILE_PATH
उचित रूप से परिभाषित करें या $JARFILE_PATH
जिस मार्ग में आपकी रुचि हो, उस मार्ग से प्रतिस्थापित करें।
अपने वितरण के आधार पर, स्थापित करें unzip
पैकेज । फिर बस मुद्दा
unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF
यह सामग्री को STDOUT में डंप कर देगा।
HTH
अन्य लोग unzip -p का उपयोग करने और grep या awk या जो कुछ भी आप की जरूरत है, के लिए पाइपिंग के बारे में पोस्ट कर रहे हैं। हालांकि यह अधिकांश मामलों के लिए काम करता है, यह ध्यान देने योग्य है कि MANIFEST.MF की 72 वर्ण-प्रति-पंक्ति सीमा के कारण, आप उन कुंजियों के लिए तैयार हो सकते हैं जिनके मान कई रेखाओं में विभाजित हैं और इसलिए पार्स करना बहुत कठिन होगा। मैं एक सीएलआई उपकरण देखना पसंद करूंगा जो वास्तव में फ़ाइल से प्रदान किए गए मूल्य को खींच सकता है।
http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html
निम्न Groovy स्क्रिप्ट प्रकट स्वरूप को अजीब लाइन ब्रेकिंग के साथ मुद्दों से बचने के लिए, जावा को प्रकट करने के लिए जावा एपीआई का उपयोग करता है:
#!/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 फ़ाइलों को तर्क के रूप में पास करें:
$ 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
या यदि आप एक-लाइनर के लिए बेताब हैं:
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