Maven Toolchains: Builds (u. a.) mit konfigurierbarem JDK

Wer mit der Betreuung von Software vertraut ist, die nicht mehr ganz taufrisch ist, kenn das Problem: Der Build muss mit einer älteren Java-Version geschehen, z. B. weil genau die beim Kunden im Einsatz ist oder weil bestimmte (auch nicht mehr ganz taufrische) Tools für aktuelle Java-Versionen nicht mehr zur Verfügung stehen.

Seit der Maven-Version 3.3.1 gibt es dafür eine Unterstützung in Form sog. Toolchains. Einfach gesprochen verbirgt sich dahinter eine Zuordnung von logischen Namen und Versionen zu Installationspfaden im Dateisystem. Dazu muss eine neue Konfigurationsdatei (per Default im Ordner .m2 des Users) angelegt werden:

<toolchains>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.6</version>
    </provides>
    <configuration>
      <jdkHome>C:\Program Files\Java\jdk1.6.0_45</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
    </provides>
    <configuration>
      <jdkHome>C:\Program Files\Java\jdk1.8.0_101</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

Leider können in dieser Datei derzeit keine Maven-Properties in der Form ${name} verwendet werden. Wer also seine Java-Home-Pfade in Environment-Variablen hat, muss sie dennoch redundant in toolchains.xml eintragen.

Im pom.xml des Maven-Projekts kann nun auf diese Konfiguration Bezug genommen werden. Dazu muss das maven-toolchains-plugin mit der gewünschten Version konfiguriert werden:

<project ...>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-toolchains-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution>
            <goals>
              <goal>toolchain</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <toolchains>
            <jdk>
              <version>1.6</version>
            </jdk>
          </toolchains>
        </configuration>
      </plugin>

Das Plugin prüft am Beginn des Builds, ob die gewünschte Version in toolchains.xml vorhanden ist und hinterläßt die zugehörigen Werte in der internen Maven-Session. Dort holen andere Plugins, u. a. das Compiler-Plugin, sich die für sie benötigten Werte ab.

Toolchains können nicht nur für JDKs aufgebaut werden. Details dazu finden sich in der Beschreibung des Plugins.

Ein Demo-Projekt ist hier verfügbar: https://github.com/GEDOPLAN/maven-toolchains-demo.

Advertisements

Über Dirk Weil
Dirk Weil ist seit 1998 als Berater im Bereich Java tätig. Als Geschäftsführer der GEDOPLAN GmbH in Bielefeld ist er für die Konzeption und Realisierung von Informationssystemen auf Basis von Java EE verantwortlich. Seine langjährige Erfahrung in der Entwicklung anspruchsvoller Unternehmenslösungen machen ihn zu einem kompetenten Ansprechpartner und anerkannten Experten auf dem Gebiet Java EE. Er ist Autor in Fachmagazinen, hält Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: