Thema dieser Dokumentation / FirstSpirit Modul-Grundkonzeption / Modul-Bestandteile / Ressourcen / Versionierung
Versionierung
<resource>-Einträge können mit bestimmten Attributen versehen werden, welche einen eindeutigen Bezeichner sowie die mitgelieferte Version (version) und die zur aktuellen Version minimal (minVersion) und maximal (maxVersion) kompatible Versionsnummer definieren.
Listing: Versionierung von Ressourcen im Modul-, Komponenten-Descriptor
<!-- Datei mit Versionsangabe -->
<resource name="myLib" version="1.2.7"
minVersion="1.2" maxVersion="1.2.999">libs/myLib.jar</resource>
Diese Informationen helfen dabei, doppelte Ressourcen bei der Kombination mehrerer Komponenten zu vermeiden. Dies kann beispielsweise bei system-weiten Komponenten oder bei Webanwendungen auftreten.
Die Verwendung der nachfolgend beschriebenen Attribute gilt für Ordner- und Datei-Ressourcen. |
Eindeutige Namen für Ressourcen vergeben
Ressourcen haben eindeutige Namen. Wird eine Bibliothek als Ressource zu einem Modul hinzugefügt, muss im Komponenten-Deskriptor ein eindeutiger Name für die Ressource definiert werden.
Es wird empfohlen, die Namen nicht nur eindeutig, sondern auch einheitlich (nach Maven-Schema) zu vergeben, um die Identifikation gleicher bzw. kompatibler Ressourcen zu ermöglichen, z. B.:
<web-resources>
<resource name="org.apache.httpcomponents:httpclient" version="4.4">lib/httpclient-compatibility.jar</resource>
</web-resources>
Der Name (nach Maven) beinhaltet zuerst eine „groupID“ (hier: org.apache.httpcomponents) und anschließend eine „artifactID“ (hier: httpclient) getrennt durch einen Doppelpunkt. Die „groupID“ ist eine Gruppierungsbezeichnung (ähnlich den Java-Package-Namen) und dient zur eindeutigen Identifikation des Herstellers. Sie entspricht normalerweise dem umgekehrten Domainname des Herstellers. Die „artifactID“ ist der Name der Ressource (siehe Maven conventions).
Anhand des Namens und weiterer Eigenschaften (s.u.) kann ermittelt werden, ob unterschiedliche Ressourcen (hier: Bibliotheken) kompatibel sind. Abhängigkeiten zu anderen Produktbestandteilen und Migrationsaufwände können dadurch oft vermieden werden.
Versionierung von Ressourcen
Bei identischen Namen wird versucht herauszufinden, ob Ressourcen miteinander kompatibel sind. Dazu werden neben dem eindeutigen Bezeichner („name“) auch die mitgelieferte Version der Ressource („version“) sowie (optional) die Angabe der minimal kompatiblen Version („minVersion“) und der maximal kompatiblen Version („maxVersion“) benötigt:
<web-resources>
<resource name="org.apache.httpcomponents:httpclient" version="4.4" minVersion="4.4" maxVersion="4.5.2">lib/httpclient-compatibility.jar</resource>
</web-resources>
Dabei ist für „maxVersion“ auch folgende Angabe zulässig:
minVersion="4.4" maxVersion="4.9.9"
sofern die Bibliothek innerhalb einer Minor-Linie stabil bleibt (auch wenn diese Version der Bibliothek zum Zeitpunkt der Modulerstellung noch nicht existiert).
Liegt eine Ressource in mehreren unterschiedlichen Versionen vor, kann anhand dieser Informationen die beste Schnittmenge zwischen den Ressourcen ermittelt werden.
Es gilt:
- Fehlt bei gleichem Namen für eine oder beide Ressourcen eine Versionsangabe („version“), sind die Ressourcen nicht kompatibel.
- Fehlt bei gleichem Namen und unterschiedlichen Versionsangaben („version“) die Angabe von „minVersion“ und „maxVersion“, sind die Ressourcen kompatibel.
- Ist bei gleichem Namen und unterschiedlichen Versionsangaben („version“) ein Kompatibilitätsraum durch die Angabe von „minVersion“ und „maxVersion“ vorhanden, wird immer die neueste (aktuellste) Ressource verwendet, die zu allen Modulen kompatibel ist.
- fehlt die Angabe von „minVersion“, ist der Kompatibilitätsraum nicht durch eine untere Grenze beschränkt (0 bis „maxVersion“)
- fehlt die Angabe von „maxVersion“, ist der Kompatibilitätsraum nicht durch eine obere Grenze beschränkt („minVersion“ bis unendlich)
Beispiele für die Ressourcendefinition (Kompatibilitätraum für Bibliotheken)
version | minVersion | maxVersion | |
---|---|---|---|
Modul A | 1.0 | 1.0 | - |
Modul B | 1.5 | 1.5 | 1.999 |
Modul C | 2.0 | - | 2.999 |
Ergebnis | Verwendet wird: Version 1.5 aus Modul B | ||
version | minVersion | maxVersion | |
---|---|---|---|
Modul A | 1.0 | 1.0 | 1.999 |
Modul B | 1.5 | 1.5 | - |
Modul C | 2.0 | 2.0 | 2.999 |
Ergebnis | Konflikt: | ||