Jars, Packages und Versionsinformationen

Thomas Darimont

Erfahrenes Mitglied
Hallo!

habt ihr euch nicht auch schon mal gefragt, welche Version von einer Bibliothek ihr denn gerade verwendet? Des Rätsels Lösung ergibt sich meistens aus dem Namen der entsprechenden Bibliothek bzw. dem Verzeichnisnamen ihrer Distribution.. So weit so gut, aber was mache ich wenn ich nur eine "einfache" jar Datei haben ohne irgendwelche Versions informationen? Dann schaue ich in die Readme (falls eine da ist) ODER ich schaue mir die Manifest.mf innerhalb der META-INF Verzeichnisses der jar Datei an. Dort sind normalerweise Zusatzinformation zu dem jar abgelegt. Das tolle an der Sache ist, dass man diese Informationen zur Lauftzeit auslesen kann!

Beispiel:

Code:
/*
 * Created on 23.12.2004@15:13:10
 *
 * TODO Licence info
 *  
 */
package de.tutorials;

/**
 * @author Administrator
 *
 * TODO Explain me
 * 
 */
public class Version {

    public static void main(String[] args) {
        Package pack = Version.class.getPackage();
        System.out.println("Title: " + pack.getImplementationTitle());
        System.out.println("Vendor: " + pack.getImplementationVendor());
        System.out.println("Version: " + pack.getImplementationVersion());
        
    }
}

Die dafür notwendigen Informationen lasse ich mir von einem Ant Task der mein jar Baut mit uns Manifest.mf File rein generieren.

Code:
<?xml version="1.0"?>
<project name="project" default="default">
	<target name="default" depends="createJar" description="--> description">
	</target>

	<target name="createJar">
		<jar destfile="deploy/version.jar" basedir="bin" update="yes">
			<manifest>
				<attribute name="Implementation-Title" value="Versions test"/>
				<attribute name="Implementation-Version" value="1.0 Beta"/>
				<attribute name="Implementation-Vendor" value="tutorials.de"/>
				<attribute name="Spring-Version" value="1.0"/>
				<attribute name="Main-Class" value="de.tutorials.Version"/>
			</manifest>
		</jar>
	</target>
</project>

Raus kommt dabei folgendes Manifest:
Code:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.5.0-b64 (Sun Microsystems Inc.)
Implementation-Title: Versions test
Implementation-Version: 1.0 Beta
Implementation-Vendor: tutorials.de
Spring-Version: 1.0
Main-Class: de.tutorials.Version

Wenn ich das ganze nun folgender Maßen Aufrufe erhalte ich diese Ausgabe:
Code:
H:\diplom\eclipse3.0.1>cmd /K java -jar workspace\versioninfo\deploy\version.jar de.tutorials.Version
Title: Versions test
Vendor: tutorials.de
Version: 1.0 Beta

H:\diplom\eclipse3.0.1>

Wie ihr sehr kann man damit ganz einfach zusätzliche Informationen zu Bibliotheken hinzufügen so dass "andere" nicht erst mühsam die Dokus durchsuchen müssen um zu sehen welche Version sie denn nun wirklich haben.

Hier noch ein paar Informationen was man alles im Manifest File ablegen kann:
http://java.sun.com/docs/books/tutorial/jar/basics/manifest.html
http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Manifest Specification

Im Anhang findet ihr das dazugehörige Eclipse Projekt.

HTH,
Gruß Tom
 

Anhänge

Zurück