GEDOPLAN
Entwicklungswerkzeuge

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

Entwicklungswerkzeuge

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!