Gabi und Sascha
Kategorien : Alle | Berlin | Bücher | Fotografie | Java | Linkhalde | Weichware | Verfassung

Maven ist ein hervorragendes Werkzeug um grosse, nicht triviale, Java Projekte zu verwalten. Trotz aller Stärken von Maven gibt es einige Dinge, die im Bereich des Abhängigkeitenmanagements vermieden werden müssen. Nicht alles was machbar ist, muss auch gemacht werden.

Regel

Verwende Versionsproperties nur innerhalb eines Projektes. Und auch nur dann, wenn die Versionsbezeichnung mehr als einmal verwendet wird.

Beschreibung

In Projekt A wird ein Property mit einer Artefaktversion definiert. Dieses Property wird in Projekt B wieder verwendet. Problematisch ist bei dieser Art der Benutzung, dass in Projekt A nicht bestimmt werden kann, für was das Property verwendet wird. Der direkte Bezug zu einem Artefakt fehlt.

Beispiel:

Projekt A


    <project>
        <artifactId>A</artifactId>
        …

        <properties>
            <version.artifact.xyz>1.2.0</version.artifact.xyz>
        </properties>
    </project>

Projekt B


    <project>
        <parent>
            <artifactId>A</artifactId>
            …
        </parent>
        <artifactId>B</artifactId>

        <dependendies>
            <dependendy>
                <artifactId>xyz</artifactId>
                <version>${version.artifact.xyz}</version>
            </dependendy>
        </dependendies>
    </project>

In so einem Fall ist es besser den dependencyManagement Mechanismus zu verwenden. In diesem Fall werden die POM Dateien wie folgt angepasst. Dabei wird in Projekt A im dependencyManagement Element das Artefakt samt Version definiert. Erst in Projekt B wird diese Abhängigkeit dann aber wirklich aufgelöst:

Projekt A


    <project>
        <artifactId>A</artifactId>
        …

        <dependencyManagement>
            <dependendies>
                <dependendy>
                    <artifactId>xyz</artifactId>
                    <version>1.2.0</version>
                </dependendy>
            </dependendies>
        </dependencyManagement>
    </project>

Projekt B


    <project>
        <parent>
            <artifactId>A</artifactId>
            …
        </parent>
        <artifactId>B</artifactId>

        <dependendies>
            <dependendy>
                <artifactId>xyz</artifactId>
            </dependendy>
        </dependendies>
    </project>

Merke

Any problem in computer science can be solved with another layer of indirection. But that usually will create another problem.- David Wheeler

Und Versionsproperties sind nicht anderes als eine Indirektion. Diese können für einen menschlichen Bearbeiter der Information schwer zu durchschauen sein. Für eine Maschine fehlt jegliche semantische Information.