Version 21.12.0 RC3

New and Noteworthy in Version 21.12

Schemas for IPS XML Files

Faktor-IPS uses XML to persist all IPS objects in the workspace. As those files are written and read exclusively by Faktor-IPS a validation of their content against an XML schema was not necessary. As more and more developers want to do small changes to some IPS objects outside of Faktor-IPS, for example with other IDEs or text editors, you can now activate the setting “validateIpsSchema” in the .ipsproject configuration file to write a schema reference in every file and validate against that schema on reading and building those files. This setting can also be activated during the migration to Faktor-IPS 21.12.

New Maven Mojo features

The Maven plugin has been expanded with the <buildIpsOnly> option which is set to true by default.
With this parameter the “faktorips-build” only generates the source code, which is then compiled by the “maven-compile” plugin.

In addition, the build mojo now is able to do incremental builds by omitting the clean phase. Therefore the working directory is no longer automatically deleted and re-imported.

The logging of the “faktorips-build” was enhanced with the platform debug tracing facility from Eclipse and can be activated with the Maven option -X. If for some reason the standard trace settings are not suitable, a separate tracing options file can be specified with the parameter <debugLogOptions>. Please refer to: FAQ How do I use the platform debug tracing facility

Enhancement of Ant tasks

The Ant task FullBuildTask has been renamed to BuildTask and two options ipsOnly and fullBuild have been added.
The ipsOnly option determines what builders to use. Either only the Faktor-Ips Builder, or all of the configured project builders.
The fullBuild option controls whether the build is started as a full or incremental build.

The tasks MavenProjectImportTask and ProjectImportTask no longer throw errors if the projects already exist.

Jakarta Persistence 2.2

Following Oracle’s abandonment of Java EE the open source project Jakarta EE was founded. Due to naming rights for “Java” remaining with Oracle in a first step all artifacts were renamed to “Jakarta”. Because many projects, including for example Spring, switched their dependencies to these renamed artifacts, Faktor-IPS now offers “Jakarta Persistence 2.2” as an option for the persistence provider to be used when persisting Faktor-IPS policy objects in a database. The generated annotations are identical to those of the “Generic JPA 2.1” persistence provider; only the dependencies created when creating a Maven project with the Faktor-IPS archetype or adding the IPS nature to an existing Maven project are changed to


With one of the following releases Faktor-IPS will support Jakarta Persistence 3, which is part of Jakarta EE 9 and changes the annotations’ namespace from “javax.persistence” to “jakarta.persistence”.

New Annotation @IpsGenerated

Many developers use tools for the automated evaluation of code quality. Those tools should check their handwritten code, but not the code generated by Faktor-IPS. Many tools can be configured via comments or annotations. Faktor-IPS now provides the annotation org.faktorips.runtime.annotation.IpsGenerated that can be automatically added to all generated methods through the setting

<Property name="additionalAnnotations" value="org.faktorips.runtime.annotation.IpsGenerated"/>

to keep for example SonarQube/JaCoCo from analysing those methods.

Java 17

Faktor-IPS 21.12 is tested to run with Java 17 as well as Java 11.


Upon migration to Faktor-IPS 21.12 the setting “validateIpsSchema” can be activated for the migrated projects, writing XML schema references in all IPS files.

Deprecation of loggingFrameworkConnector

We marked the extension point loggingFrameworkConnector and the associated interface IIpsLoggingFrameworkConnector as deprecated since we no longer use it in any builder.

Navigate to Templates

Templates are visible and editable in the Productdefinition view, therefore they can now also be navigated independently of the setting “Can navigate to model or Java Sourcecode”.


The matchers for the org.faktorips.runtime.MessageList in de.faktorzehn.commons.ips.test.matcher.IpsMatchers are now part of Faktor-IPS and available in org.faktorips.testsupport.IpsMatchers(some with a different name). Additionaly there are matchers for org.faktorips.valueset.ValueSet in org.faktorips.testsupport.ValueSetMatchers.
Use the dependency


Fixed Bugs

  • NPE when trying to Copy&Paste in Attribute Edit Dialog (FIPS-1602)
  • Concrete Enum can’t be switched to abstract (FIPS-6450)
  • Value Set can’t be changed when creating a product attribute (FIPS-6570)
  • IPS-Test can’t find Maven dependencies (FIPS-6683)
  • “Includes <null>” in product editor can’t be removed when <null> is not allowed in the policy attribute (FIPS-6701)
  • Schemsa for XML files (FIPS-7445)
  • Radio buttons for relevance stay readonly for templates (FIPS-7749)
  • Copy&Paste in dialogs (FIPS-7759)
  • NullPointerException when checking values of attributes in a LongRange (FIPS-7884)
  • IllegalArgumentException when checking an attribute value of type Money in ValueSet with differing currency (FIPS-7885)
  • ProductCmptBuilder: cardinality missing in super call (FIPS-7909)
  • CSV import adding to table is not persisted (FIPS-7969)
  • Archetype does not work in Eclipse (FIPS-7970)
  • Empty line in generated Javadoc comment in Table Row classes (FIPS-7971)
  • NullPointerException in product structure explorer (FIPS-7973)
  • StringLengthValueSet: faulty implementation of isEmpty() and isDiscrete() (FIPS-7979)
  • “Show structure” missing in product definition perspective context menu (FIPS-8063)
  • Validation for duplicate kind-id-version-id-combination can’t be disabled (FIPS-8073)
  • NPE when calling “getValues(true)” on a BigDecimalRange without a step (step = null) (FIPS-8081)
  • Values for DynamicEnumDatatype in TableContent can’t be corrected/displayed (FIPS-8083)
  • Maven Build fails irregularly (FIPS-8088)
  • DefaultRange.isUnrestricted(true) does not treat empty range correctly (FIPS-8114)
  • Maven-Build hangs (FIPS-8147)
  • Java 11 breaks XMLs with values and extension properties (FIPS-8149)
  • NPE when fixing differences (FIPS-8156)
  • Product structure explorer does not display static rules (FIPS-8198)
  • Errors in tutorial (FIPS-8206)
  • No more handles in DeepCopyWizard (FIPS-8219)
  • Long attributes in FIPS enums create noncompilable code in enums (FIPS-8226)
  • Date-Picker in Eclipse 21.6 (FIPS-8230)

New Features

  • MultiEdit: promote to add-on status (FIPS-7448)
  • New extension point called before saving product components (FIPS-7549)
  • Documentation for relevances (FIPS-7761)
  • Product data in DB – FIPS Tables (FIPS-8196)


  • License for Runtime-Addon-JPA (FIPS-6359)
  • Error message relates to adaptor stage even if there is no adaptor stage (FIPS-6836)
  • Abstract Enums as datatype for policy-only attributes on concrete policy types (FIPS-6875)
  • Attribute “includes ” should be displayed better (FIPS-7129)
  • Navigation to templates should always be possible (FIPS-7398)
  • Order of custom validations should match the one in the ExtensionPoint: org.faktorips.devtools.core.customValidation. (FIPS-7536)
  • Incremental build (FIPS-7572)
  • Menu-Enablement should not unnecessarily instantiate IPS objects (FIPS-7682)
  • jakarta.persistence 2.2 as Persistence Provider (FIPS-7741)
  • Improve logging (FIPS-7796)
  • Use official Eclipse-Update-Site as Default in Mojo (FIPS-7816)
  • Java 17 (FIPS-7865)
  • Switch tutorial to Maven projects (FIPS-7921)
  • Use -Dmaven.repo.local in Mojo’s Eclipse (FIPS-7922)
  • Tests against different versions (FIPS-7968)
  • Method to check whether a ValueSet is limited (FIPS-7980)
  • Faktor-IPS Maven Plugin should work with Lombok in a project (FIPS-7981)
  • Incremental IPS-Build (FIPS-8014)
  • Improve logging (FIPS-8026)
  • @Generated annotation to exclude generated code from code coverage tools (FIPS-8109)
  • Deprecate loggingFrameworkConnector (FIPS-8120)
  • Enable XML validation settings (FIPS-8143)
  • toString in PolicyCmptType subclasses should call super by default (FIPS-8168)
  • Distribute matchers from f10-commons with Faktor-IPS (FIPS-8175)