Verwendung von Faktor-IPS-Projekten als Maven-Dependencies

Motivation

In vielen Java-Projekten wird Maven als Build-Tool und zum Dependency-Management eingesetzt. Darum liegt es nahe, auch die Abhängigkeiten zwischen Faktor-IPS-Projekten über Maven abzubilden.

Einstellungen

In den referenzierten Projekten

  • Zuerst müssen in allen Faktor-IPS-Projekten, die per Maven referenziert werden sollen, einige Einstellungen aus der .ipsproject-Datei im Manifest (META-INF/MANIFEST.MF) duplizieren. Die Einstellungen sind in unter Verwendung des Manifest für Faktor-IPS-Projekte beschrieben.

  • Das handgeschriebene Manifest muss von Maven übernommen werden:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>default-jar</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                    <manifestFile>META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>
  • Die Modell- bzw. Produktordner sollten, sofern sie nicht in der Maven-üblichen Struktur liegen als Resource hinzugefügt werden:

<resource>
    <directory>model</directory>
    <targetPath>model</targetPath>
</resource>
  • Sofern Source-Code für Formeln generiert wird, muss Maven angewiesen werden, diesen auch im derived-Ordner zu bauen:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals><goal>add-source</goal></goals>
            <configuration>
                <sources><source>${project.basedir}/derived</source></sources>
            </configuration>
        </execution>
    </executions>
</plugin>

In den referenzierenden Projekten

In den referenzierenden Faktor-IPS-Projekten muss dann in der Datei .ipsproject der IpsObjectPath angepasst werden. Anstelle der bisher referenzierten Projekte genügt ein Eintrag für den Maven-Classpath-Container:

<Entry container="JDTClasspathContainer" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" reexported="false" type="container"/>

Maven-Version-Provider

Es ist es sinnvoll in der .ipsproject-Datei den Maven Version Provider einzutragen: <Version versionProvider="org.faktorips.maven.mavenVersionProvider"/>.
Dadurch wird die Version aus der pom.xml ausgelesen und kann z.B für @since-Annotationen an neuen Klassen oder Attributen genutzt werden.

In der Table-of-Contents-XML-Datei werden dann statt der Version die Maven-Koordinaten als productDataVersion eingetragen und zur Laufzeit damit die tatsächliche Version aus den pom.properties ausgelesen.

Erstellung von Faktor-IPS Projekten als Maven-Projekte

Faktor-IPS-Projekte können seit der Version 21.6 direkt als Maven-Projekte mittels Maven-Archetypes generiert werden. Genaueres dazu ist hier beschrieben.

Faktor-IPS-Build mit Maven

Mit dem Faktor-IPS Maven Plugin ist es einfach, einen zentralisierten Build mit einem Continuous-Integration-Server einzurichten. Nur das Modell und der Quellcode müssen eingecheckt werden, alle anderen generierten Dateien (derived sources) werden auf dem Build-Server erstellt. Dadurch werden fehleranfällige Merge-Konflikte reduziert, die durch unterschiedliche Entwicklungsumgebungen und Betriebssysteme verursacht werden.

Die Dokumentation des Faktor-IPS Maven Plugins wird automatisch mit jeder neuer Version angepasst und ist mit diesem Link zu finden: Dokumentation des Faktor-IPS Maven Plugin