ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1111
1111
EMPFEHLEN
-
Hallo,
ich habe folgendes Problem. Ich soll zur Laufzeit Informationen aus einem MANIFEST lesen. Ich habe ein Anwendung die als jar gepackt wird. In ihr befindet sich dementsprechend das zu lesende MANIFEST. Die Klasse, die die Information lesen soll, befindet sich ebenfalls in dem Jar. Ich versuche also nicht auf ein MANIFEST in einem externen jar zuzugreifen sondern auf "das eigene".
Das klingt, als würde es dafür eine simple und elegante Lösung geben. Ich habe sie nur leider bisher nicht gefunden. Wäre cool, wenn mir jemand weiterhelfen könnte.
Danke schonmal
Harri E.
-
23.05.06 12:41 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Ein (sicherer) Weg waere beispielsweise:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
/** * */ package de.tutorials; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.jar.JarFile; import java.util.jar.Manifest; /** * @author Tom * */ public class ManifestAnalyzer { /** * @param args */ /** * @param args */ public static void main(String[] args) throws Exception { Manifest manifest = getManifestFileOfJarContaining(ManifestAnalyzer.class); System.out.println(manifest.getMainAttributes().getValue("Main-Class")); } /** * @return * @throws IOException * @throws URISyntaxException */ public static Manifest getManifestFileOfJarContaining(Class clazz) throws IOException, URISyntaxException { JarFile jarFile = new JarFile(new File(clazz.getProtectionDomain() .getCodeSource().getLocation().toURI())); Manifest manifest = jarFile.getManifest(); jarFile.close(); return manifest; } }
Code :1 2
C:\>java -jar manifestAnalyzer.jar de.tutorials.ManifestAnalyzer
Eine andere Moeglichkeit waere ueber den entsprechenden ClassLoader zu gehen... das Problem hierbei ist jedoch, dass der zum Jar gehoerende ClassLoader auch noch andere Jars im Repository hat...:
Liefert beispielsweise:Code java:
Code :1 2
C:\>java -jar manifestAnalyzer.jar jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/rt.jar!/META-INF/MANIFEST.MF
Code java:1 2 3 4 5
Enumeration manifestResources = ManifestAnalyzer.class.getClassLoader() .getResources("META-INF/MANIFEST.MF"); while (manifestResources.hasMoreElements()) { System.out.println(manifestResources.nextElement()); }
Code :1 2 3 4 5 6 7 8 9 10
C:\>java -jar manifestAnalyzer.jar jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/rt.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/jsse.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/jce.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/charsets.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/ext/dnsns.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/ext/localedata.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/ext/sunjce_provider.jar!/META-INF/MANIFEST.MF jar:file:/C:/Program%20Files/Java/jdk1.5.0_05/jre/lib/ext/sunpkcs11.jar!/META-INF/MANIFEST.MF jar:file:/C:/manifestAnalyzer.jar!/META-INF/MANIFEST.MF
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi !
Es geht,soweit ich weiss, auch mit dem JarFileInputStream ...
Krösi
-
23.05.06 12:56 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
AFAIK ist es egal ob man ueber das JarFile oder ein JarInputStream geht um sich mit getManifest das entsprechende Manifest zu besorgen. Der Punkt ist dass man dazu auf jeden Fall das Jar bzw. die Location des jars kennen muss. Um den Speicherort des Jar Files zu erfahren in dem sich eine spezielle Klasse befindet ist es eben eine Moeglichkeit ueber clazz.getProtectionDomain()Es geht,soweit ich weiss, auch mit dem JarFileInputStream ...
.getCodeSource().getLocation().toURI() zu gehen.
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo Tom,
wieso wird hier das Manifest vom JDK ausgegeben anstatt dessen, von welcher die Main-Class aufgerufen wird?
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import java.io.*; public class ReadManifest { public static void main(String[] args) { try { InputStream is = ReadManifest.class.getClassLoader() .getResourceAsStream("META-INF/MANIFEST.MF"); BufferedReader in = new BufferedReader(new InputStreamReader(is)); String s = ""; while ((s = in.readLine()) != null) System.out.println(s); in.close(); } catch (NullPointerException e) { System.out.println("Error: " + e.getMessage()); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } } }
Ausgabe:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Manifest-Version: 1.0 Specification-Title: Java Platform API Specificat Created-By: 1.5.0_04 (Sun Microsystems Inc.) Implementation-Title: Java Runtime Environment Specification-Vendor: Sun Microsystems, Inc. Specification-Version: 1.5 Implementation-Version: 1.5.0_04 Implementation-Vendor: Sun Microsystems, Inc. Name: javax/swing/JRadioButtonMenuItem.class Java-Bean: True Name: javax/swing/JList.class Java-Bean: True Name: javax/swing/JPasswordField.class Java-Bean: True ...
Vg Erdal
-
23.05.06 13:42 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Wie ich schon sagte, der ClassLoader der fuer "dieses" Jar verantwortlich ist hat auch noch andere Jars in seiner URL Liste. Wenn man nun mit getResource(...) eine Resource sucht, dann schaut der ClassLoader mit dem angegebenen Suchmuster in seine URL Liste und gibt den zuerst gefunden Eintrag zurueck...
aus meinem Beispiel listet alle Resourcen auf die dem angegebenen Muster entsprechen.Code java:1 2 3 4 5
Enumeration manifestResources = ManifestAnalyzer.class.getClassLoader() .getResources("META-INF/MANIFEST.MF"); while (manifestResources.hasMoreElements()) { System.out.println(manifestResources.nextElement()); }
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
D a n k e .
Ähnliche Themen
-
Jar und Manifest
Von DerKoenig im Forum JavaAntworten: 2Letzter Beitrag: 17.11.10, 14:33 -
Frage zu Manifest Datei für Jar-archiv
Von voodinator im Forum JavaAntworten: 4Letzter Beitrag: 02.09.10, 12:19 -
Wie zusätzliche Manifest Datei angeben?
Von buell im Forum .NET CaféAntworten: 1Letzter Beitrag: 26.06.08, 13:46 -
xp manifest
Von utzutz im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 10.07.05, 11:31 -
Datei Zugriff über Applet durch eine Policy - Datei
Von Kian_the_klingon im Forum JavaAntworten: 0Letzter Beitrag: 31.07.04, 20:23





Zitieren

Login





