Mit Java SE 7 keine JARs mehr

Posted September 18, 2007

Im Java Community Process gibt es viele interessante Vorschläge für Java 7. Wie bereits in diesem Artikel beschrieben, sind Closured für Java SE 7 im Gespräch - genauso wie auch die Properties, die es in C# gibt.

Richtig interessant sind aber vor allem die Java Specification Requests JSR277 und JSR294. Die elementare Code-Einheit in Java ist die Klasse und da diese gemeinsam mit dem Namespace auch immer den Dateipfad bestimmt, ergeben sich normalerweise wenig Probleme bei Projekten, die dann externe Resourcen mithilfe einer JAR-Datei benutzen. Eine JAR-Datei ist prinzipiell nichts anderes als ein Archiv, in dem wiederum alle Namespaces als Ordner und alle Klassen als Dateien gemeinsam mit einem Manifest oder sonstigen Meta-Daten verpackt ist.

In C# setzt man auf Assemblies. So werden alle Typen (Klassen, Schnittstellen-Definitionen, etc.) gemeinsam in ein Assembly - normalerweise eine DLL oder eine EXE Datei verpackt. Diese kann dann in anderen Projekten als Referenz hinzugefügt werden oder abern im Global Assembly Cache (GAC) gefunden werden. Dieses Konzept ist zwar schon etwas fortschrittlicher als die JAR-Dateien bei Java, allerdings kann es bei größeren Anwendungen sehr mühsam werden, wenn eine refenrenziertes Assembly auf eine neue Version geupdates wird. Außerdem ist das Konzept der Assemblies auch nicht grobgranular genug, so kann es bei einer großen ASP.Net Anwendung dazu kommen, dass Dutzende oder Hunderte von DLLs bei der Auslieferung der Website mitausgeliefert werden müssen.

Lange Rede, kurzer Sinn: Mit Java SE 7 soll es nun ein Konzept für 'Module' in Java geben, sodass Bibliotheken nicht mehr als JAR-Dateien, sondern als Module ausgeliefert werden. Ein solches Modul hat einen eindeutigen Namen (Vergleich: Strong Name bei .Net) und eine Version. Desweiteren kann ein Modul zwar weitere Module enthalten oder auch andere externe Module referenzieren. Dabei kann dann optional auch eine genaue Version verlangt werden oder sogar eine gewisse Versions-Spanne. Die Modul-Verwaltung erfolgt durch die JRE, die dann auch ähnlich wie das OSGi-Framework von Eclipse die benötigten Module dynamisch aus dem Internet nachladen kann, Abhängigkeiten auflöst und mit dem Betriebssystem kooperiert. Bisher musste ein Java-Entwickler (fast) immer eine Batch-Datei mitliefern, wenn es seine Java Programme von normalen Benutzern auf Windows ausführen lassen möchte. Man wird sich bei der Implementierung des Java(tm) Modul Systems sicherlich auch bei Maven etwas abgucken. Eine erfolgreiche Umsetzung wird Java sicherlich auch wieder für einige C# Entwickler interessant machen, die mit der 90er Jahre Architektur von großen Java Anwendungen unzufrieden sind.

(originally posted on 2007-09-19)