Neues in Version 21.12
Schemas für IPS-XML-Dateien
Faktor-IPS nutzt XML zur Speicherung aller IPS-Objekte im Workspace. Da diese Dateien nur von Faktor-IPS geschrieben und gelesen werden war eine Validierung des Inhalts gegen ein XML-Schema bisher nicht nötig. Da nun immer mehr Entwickler kleinere Anpassungen an IPS-Objekten gerne auch außerhalb von Faktor-IPS, zum Beispiel mit anderen IDEs oder Texteditoren, vornehmen wollen kann über die Einstellung „validateIpsSchema“ in der .ipsproject-Konfigurationsdatei jetzt eine Schema-Referenz in die Dateien geschrieben wird gegen das beim Lesen und Kompilieren dann validiert wird. Diese Einstellung kann auch im Zuge der Migration aktiviert werden.
Erweiterung des Maven-Mojos
Das Maven-Plugin wurde um den Parameter <buildIpsOnly> erweitert der standardmäßig auf true
gesetzt ist.
Damit wird gesteuert das der „faktorips-build“ nur noch den Quellcode generiert, der dann erst vom nachfolgenden „maven-compile“ kompiliert wird.
Ebenfalls wurde das Build-Mojo um die Möglichkeit erweitert einen inkrementellen Build zu machen. Somit wird nicht mehr automatisch das Arbeitsverzeichnis gelöscht und alles neu importiert, sondern nur noch wenn die Phase clean
angeben wird.
Das Logging des „faktorips-build“ wurde mit der platform debug tracing facility von Eclipse erweitert und kann mit der Maven Option -X
aktiviert werden. Falls die Standard-Einstellungen nicht passend sind kann mit dem Parameter <debugLogOptions>
eine eigene Tracing Options Datei angegeben werden. Siehe: FAQ How do I use the platform debug tracing facility
Erweiterungen der Ant-Tasks
Der Ant-Task FullBuildTask wurde in BuildTask umbenannt und um zwei Optionen ipsOnly
und fullBuild
erweitert.
Dabei steuert die Option ipsOnly das nur der Faktor-Ips Builder gestartet wird, nicht aber die anderen im Projekt konfigurierten Builder.
Die Option fullBuild steuert dabei ob der Build als Voller- oder Inkrementeller-Build gestartet wird.
Die Tasks MavenProjectImportTask und ProjectImportTask werfen jetzt keine Fehler mehr wenn die zu importierenden Projekte bereits existieren.
Jakarta Persistence 2.2
In Folge der Freigabe von Java EE durch Oracle wurde das Open-Source-Projekt Jakarta EE gegründet. Aus Namensrechtlichen Gründen wurden in einem ersten Schritt alle Artefakte umbenannt und nutzen jetzt nicht mehr „Java“ im Namen sondern „Jakarta“. Da diverse Projekte wie z.B. Spring ihre Dependencies auf diese neuen Artefakte umgestellt haben bietet auch Faktor-IPS die Möglichkeit „Jakarta Persistence 2.2“ als Persistence-Provider für die Abbildung von Faktor-IPS-Vertragsobjekten in Datenbanken zu verwenden. Die generierten Annotations sind identisch mit denen des „Generic JPA 2.1“ Persistence Providers, lediglich die Dependencies die in Maven-Projekten beim Anlegen oder Hinzufügen der IPS-Nature eingetragen werden ändern sich auf
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>2.2.3</version>
</dependency>
Erst mit einer kommenden Faktor-IPS-Version wird auch Jakarta Persistence 3 unterstützt werden, welches als Teil von Jakarta EE 9 dann auch für die Annotations den Namensraum von „javax.persistence“ zu „jakarta.persistence“ ändert.
Neue Annotation @IpsGenerated
Viele Entwickler benutzen Werkzeuge zur automatischen Einschätzung der Codequalität. Dabei soll aber natürlich nur der selbst geschriebene Code, nicht der von Faktor-IPS generierte geprüft werden. Viele Werkzeuge lassen sich dazu über Kommentare oder Annotations steuern. Mit org.faktorips.runtime.annotation.IpsGenerated gibt es jetzt eine auch in kompilierten Klassen erhalten bleibende Annotation, die Faktor-IPS über die Einstellung
<Property name="additionalAnnotations" value="org.faktorips.runtime.annotation.IpsGenerated"/>
an alle generierten Methoden generieren kann, um damit z.B. SonarQube/JaCoCo von der Analyse dieser Methoden abzuhalten.
Java 17
Faktor-IPS 21.12 läuft jetzt auch mit Java 17 und weiterhin mit Java 11.
Migration
Bei der Migration auf Faktor-IPS 21.12 kann die Einstellung „validateIpsSchema“ für die migrierten Projekte gesetzt und damit eine XML-Schema-Referenz in alle IPS-XML-Dateien geschrieben werden.
Deprecation des loggingFrameworkConnectors
Den Extension Point loggingFrameworkConnector und das dazugehörige Interface IIpsLoggingFrameworkConnector haben wir als Deprecated markiert, da wir ihn in keinem Builder mehr nutzen.
Navigation zu Produktvorlagen
Da Vorlagen in der Produktdefintionsperspektive sichtbar und bearbeitbar sind können diese nun auch unabhängig von der Einstellung „Navigation zum Modell oder Java-Sourcecode möglich“ navigiert werden.
Matcher
Die Matcher für die org.faktorips.runtime.MessageList
aus de.faktorzehn.commons.ips.test.matcher.IpsMatchers
sind nun auch Teil von Faktor-IPS und (unter teilweise anderem Namen) in org.faktorips.testsupport.IpsMatchers
verfügbar. Zusätzlich gibt es Matcher für org.faktorips.valueset.ValueSet
in org.faktorips.testsupport.ValueSetMatchers
.
Maven-Dependency:
<groupId>org.faktorips</groupId>
<artifactId>org.faktorips.testsupport</artifactId>
<scope>test</scope>
Behobene Bugs
- NPE beim Versuch eines Copy&Paste im Attribute Edit Dialog (FIPS-1602)
- Konkreter Enum kann nicht auf abstrakt umgestellt werden (FIPS-6450)
- Wertebereich lässt sich beim Anlegen eines Produktbausteintyp-Attributs nicht ändern (FIPS-6570)
- IPS-Test findet Abhängigkeiten aus Maven-Dependencies nicht (FIPS-6683)
- „Beinhaltet <null>“ in Produkt-Editor kann nicht entfernt werden, wenn in Vertragsklasse <null> nicht zugelassen ist. (FIPS-6701)
- Schema für XMLs (FIPS-7445)
- Radio Buttons für Relevanz bleiben bei Template Nutzung readonly (FIPS-7749)
- Copy&Paste in Dialogen (FIPS-7759)
- NullPointerException bei Prüfen eines Wertes eines Attributes vom Typ Long in einer LongRange (FIPS-7884)
- IllegalArgumentException bei Prüfen eines Wertes eines Attributes vom Typ Money in ValueSet mit unterschiedlicher Währung (FIPS-7885)
- ProductCmptBuilder: cardinality fehlt im super Aufruf (FIPS-7909)
- CSV Import an Tabelle anhängen speichert nicht auf Platte (FIPS-7969)
- Archetype funktioniert nicht in Eclipse (FIPS-7970)
- Leerzeile in generiertem Javadoc Kommentar bei Table Row Klassen (FIPS-7971)
- NullPointerException im ProduktStrukturExplorer (FIPS-7973)
- StringLengthValueSet: fehlerhafte Implementierung isEmpty() und isDiscrete() (FIPS-7979)
- „Struktur anzeigen“ fehlt im Kontextmenü in Produktdefinitionsperspektive (FIPS-8063)
- Validierung für doppelte Kind-ID-Version-ID-Kombinationen nicht ausschaltbar (FIPS-8073)
- NPE when calling „getValues(true)“ on a BigDecimalRange without a step (step = null) (FIPS-8081)
- Werte für DynamicEnumDatatype in TableContent nicht korrekt wählbar/dargestellt (FIPS-8083)
- Maven Build schlägt unregelmäßig fehl (FIPS-8088)
- DefaultRange.isUnrestricted(true) berücksichtigt empty Range nicht (FIPS-8114)
- Maven-Build hängt (FIPS-8147)
- Java 11 bricht XMLs mit Werten und Extension Properties um (FIPS-8149)
- NPE beim Unterschiede beheben (FIPS-8156)
- Produkt-Struktur-Explorer zeigt Regeln nicht an (FIPS-8198)
- Fehler im Tutorial (FIPS-8206)
- No more handles im DeepCopyWizard (FIPS-8219)
- Long-Attribute in FIPS-Enums erzeugen nicht kompilierbaren Code bei großen Werten (FIPS-8226)
- Datum-Picker in Eclipse 21.6 (FIPS-8230)
Neue Features
- MultiEdit: in Core als Add-On aufnehmen (FIPS-7448)
- neuer Extension Point beim Speichern eines Produktkonfigurationsbausteines (FIPS-7549)
- Dokumentation zu Relevanzen (FIPS-7761)
- Produktdaten in DB schreiben – FIPS Tabellen (FIPS-8196)
Verbesserungen
- Lizenz für Runtime-Addon-JPA (FIPS-6359)
- Fehlermeldung beschreibt die Anpassungsstufe, obwohl es keine Anpassungsstufen gibt (FIPS-6836)
- Abstrakte Enums als Datentyp für reine Vertragsattribute an konkreten Vertragstypen (FIPS-6875)
- Attribut „beinhaltet “ anders darstellen (FIPS-7129)
- Navigation zu Vorlagen sollte immer möglich sein (FIPS-7398)
- Reihenfolge von Custom Validations soll der im ExtensionPoint: org.faktorips.devtools.core.customValidation entsprechen. (FIPS-7536)
- Incremental build (FIPS-7572)
- Menü-Enablement sollte Ips-Objekte nicht unnötig instantiieren (FIPS-7682)
- jakarta.persistence 2.2 als Persistence Provider (FIPS-7741)
- Logging verbessern (FIPS-7796)
- Offizielle Eclipse-Update-Site als Default im Mojo nutzen (FIPS-7816)
- Java 17 (FIPS-7865)
- Tutorial umstellen auf Maven-Projekte (FIPS-7921)
- -Dmaven.repo.local auswerten und in Eclipse setzen (FIPS-7922)
- Versionsübergreifende Tests (FIPS-7968)
- Abfragemöglichkeit, ob ein ValueSet nicht eingeschränkt ist (FIPS-7980)
- Faktor-IPS Maven Plugin und Lombok sollen in einem Projekt verwendet werden können (FIPS-7981)
- Incremental IPS-Build (FIPS-8014)
- Logging verbessern (FIPS-8026)
- @Generated Annotation um generierten Code aus der CodeCoverage raus zu nehmen (FIPS-8109)
- loggingFrameworkConnector deprecaten (FIPS-8120)
- XML-Validierungs-Setting aktivieren (FIPS-8143)
- toString in PolicyCmptType-Subklassen sollte per default super aufrufen (FIPS-8168)
- Matchers aus f10-commons mit IPS veröffentlichen (FIPS-8175)