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 der Dokumentation zur Verwendung von Faktor-IPS-Projekten als OSGi-Bundles, im Abschnitt META.INF/MANIFEST.MF 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"/>

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