Vor kurzem kam ich bei einem Java-Projekt zum ersten Mal in die Situation externe Pakete einbinden zu müssen. Das sollte eigentlich auch gar kein so großes Problem sein, jedoch machten die zusätzlichen entstandenen Abhängigkeiten Probleme. Genau genommen musste ich letztendlich 4 zusätzliche Pakete finden und herunterladen, wobei innerhalb dieser Pakete wiederum probleme mit den unterschiedlichen Versionen entstanden. Man kann sich das Chaos also gut vorstellen.
Es sei X Anbieter eines freien Java-Paketes zum Automatisieren von Webseitenzugriffen. Y sei Anbieter eines extern Abhängigen Pakets zum verarbeiten der Log-Ströme. Nun stellt X die Entwicklung ein, während in Y eine revolutionäre Neuerung implementiert wird, die die Hälfte der Klassen des Pakets überflüssig macht. Ab Version 1.3.24 werden diese Klassen also einfach gelöscht. Noch besser: X nutzt in einigen seiner Klassen das com.*-package, in dem der Programmierer wohl wundersame und aufregende Klassen fand.
Fakt ist dass eben dieses Paket von Sun NICHT für den öffentlichen Gebrauch bestimmt ist, es enthält nur Klassen die sich in der Testphase befinden. Durchlaufen besagte Klassen diese Testphase erfolgreich, werden sie in die bekannten java.* bzw javax.*-Pakete geschoben. Wer das com.*-Paket nutzt kann also darauf wetten dass früher oder später die genutzte Klasse weg ist. Das selbst Entwickler wie Apache dies nicht kapieren, ist traurig.
Warum schreibe ich diesen Artikel?
- Wenn offene Klassen verwendet werden, bindet diese in euer fertiges Paket ein!
- Falls ihr doch nicht im Stande sein solltet externe Abhängigkeiten einzubinden bzw. falls lizenzielle Einschränkungen vorliegen, packt die VERSIONSNUMMER der externen Abhängigkeiten in die Dokumentation. Und betet dass der Hersteller der Abhängigkeiten ein Archiv früherer Versionen führt.
- Schmeißt nicht einfach eine releaste Klassenstruktur um, und wenn dann dokumentiert das richtig.
- Verwendet keine com.* Klassen. Falls das doch nötig sein sollte, siehe unten.
Da ich in einem anderen Projekt eben doch auf eine com.*-Klasse zurückgreifen musste (durchsichtige Fenster in AWT), hier ein Tipp falls ihr auch in so eine Situation kommt:
system.getProperty(“java.version”)
…gibt einen String mit der Version der JRE zurück. Nutzt ihr ein com.*-Paket, so checkt die Version und packt das Ganze in eine Bedingung.
Tags: Entwicklung

No comments
Comments feed for this article
Trackback link
http://www.p-shuttle.de/joh/2008/07/25/jre-versionen/trackback/