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

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.

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"/>

Zusätzlich empfehlen sich einige Einstellungen in Maven, damit in den gebauten JARs alle benötigten Informationen landen:

  • 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>
    
  • 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>
    

Faktor-IPS-Build mit Maven

Wollen Sie nicht nur die von Faktor-IPS in Eclipse gebauten Artefakte einchecken und in Maven-Bundles verwenden sondern auch den Faktor-IPS-Build z.B. auf einem Buildserver laufen lassen, ist dies mittels des Maven-Plugins Tycho und einem damit gestarteten Headless Eclipse möglich. Kontaktieren Sie uns gerne bei Fragen dazu. Für ein eigenes Maven-Plugin welches diesen Schritt vereinfacht suchen wir derzeit noch Kunden, die sich an der Entwicklung beteiligen wollen.