Java Getriebe

Java und NetBeans

Selbstaktualisierende Anwendungen

Bei heutige Software wird vom Anwender schon fast vorausgesetzt, dass die Anwendung automatisch „im Internet“ nachschaut ob eine neuere Version seiner Selbst vorhanden ist und im positiven Fall dann auch automatisch eine Aktualisierung von sich selbst auf dem lokalen Rechner vornimmt. Allerdings stellt sich diese „Selbstverständlichkeit“ in der Praxis oft als erst zu nehmendes Problem heraus: Wie bitte schön, soll ich eine Datei (also die Jar-Datei) mit neuem Inhalt befüllen, wenn sie gerade geöffnet und für Änderungen gesperrt ist? Schließlich werden die .class-Datei aus der Datei gerade von der Java-VM verwendet. Vielleicht ist dies auch ein Grund, warum es keine Standardlösung von Java selbst existiert um mit dieser Problematik umzugehen. Read More

Ant: Manifest Dateien korrekt als Properties einlesen

Der Ant Task <property> ist nicht nur in der Lage Java Properties Dateien einzulesen und somit die einzelnen Variablen verfügbar zu machen, sondern auch manifest.mf Dateien, die für Jar-Archivdateien benötigt werden. Das liegt aber nicht unbedingt am Task selbst, sondern viel mehr an der Klasse java.util.Properties und dessen Fähigkeit neben dem Gleichheitszeiche = auch den Doppelpunkt und ein Leerzeichen als Trenner zwischen Schlüssel und Wert erkennt :

The key contains all of the characters in the line starting with the first non-white space character and up to, but not including, the first unescaped ‚=‘, ‚:‘, or white space character other than a line terminator. All of these key termination characters may be included in the key by escaping them with a preceding backslash character;

Leider gibt es in der Spezifikation der Manifestdatei einen kleinen Passus:

Line length: No line may be longer than 72 bytes (not characters), in its UTF8-encoded form. If a value would make the initial line longer than this, it should be continued on extra lines (each starting with a single SPACE).

Diese Einschränkung steht im Gegensatz zur Properties Spezifikation in der Folgezeilen durch einen Backslash \ am Ende der vorherigen Zeile gekennzeichnet werden. Der <property> kann also nicht einfach so jede Manifestdatei einlesen, ohne dass es zu Problemen führen würde. Read More