Manifest aus jar lesen

marcigod

Grünschnabel
Hy leutz!

Meine Frage: Wie lese ich die Attribute aus meinem MANIFEST.MF die ich selbst mit eingefügt habe?

das Manifest wird erfolgreich mit folgendem ANT Code erstellt
Code:
<target name="CreateJarWithManifest" description="Erstellt ein neues JAR Archiv">
		<echo message="Erstellen des JAR Files..."/>
		<tstamp>
			<format property="Datum" pattern="dd.MM.yyyy"/>
		</tstamp>
			
		<jar jarfile="${src}" compress="true" basedir=".">
			<exclude name="**/*.java" />	
			<exclude name="**/*.jardesc" />	
			<exclude name="build.xml" />	

			<manifest>
				<attribute name="Main-Class" value="ftp"/>
				<attribute name="Firmierung" value="Firma"/>
			    <attribute name="User" value="${user.name}"/>
				<attribute name="Version" value="${Version}"/>
				<attribute name="Datum" value="${Datum}"/>
				<section name="Informationen">
					<attribute name="NameX" value="FTP"/>
					<attribute name="Version" value="${Version}"/>
					<attribute name="Datum" value="${Datum}"/>
				</section>
			</manifest>
		</jar>
	</target>

und ich wollte es in der im jar enthaltenen ftp.class auslesen mit
Code:
 Manifest manifest = new Manifest(ftp.class.getResourceAsStream("META-INF/MANIFEST.MF"));
Attributes a = manifest.getAttributes("Informationen"); //>>statt Informationen hatte ich auch schon die namen der Attribute

	         for (Iterator iter = a.keySet().iterator(); iter.hasNext();) {
	            Attributes.Name name = (Attributes.Name) iter.next();
	            String value = a.getValue(name);
	            System.out.println("key:" + name + " Value: " + value);
	         }

Aber leider werden die nicht gefunden... was stimmt da nicht
THX
 
Kein Wunder, die Zeile
Code:
ftp.class.getResourceAsStream("META-INF/MANIFEST.MF")
liefert ja auch sowas wie
Code:
file:/[Pfad_der_JarFile]!/[Pfad_der_Klasse]
zurück, wodurch "META-INF/MANIFEST.MF" nicht gefunden werden kann.

Ich hätte sonst folgenden Vorschlag für dich:
Code:
 public static void main(String[] args) {

        
            try {                 

                // URL zur gegenwärtigen Klasse holen
                URL url = Main.class.getResource("");
                
                /**
                 * Wandle in URI um, damit der Anfangsteil "file:" herausgelöscht wird.
                 * 
                 * Zusätzlich wird alles nach dem Zeichen "!" abgeschnitten, da
                 * dieser eine Unterscheidung zwischen Jar-File und Klasse macht
                 */
                URI uri = new URI(url.getPath().split("!")[0]);
                
                // Hohle den Pfad 
                JarFile test = new JarFile(uri.getPath());
               
                System.out.println("Im Schlüssel Main Class steht: " + test.getManifest().getMainAttributes().getValue("Main-Class"));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            
 
    }

Klapt wunderbar. Du musst nur bei der URL die Klasse austauschen, wovon du getResource() aufrufst.

Gruß, Manuel
 
Zurück