Contents

Most installations upgrade to 6.2.0 without changes. Review the items below if you run the Docker images, build multi-module projects with the OpenL Maven Plugin, or have clients generated from the OpenL Studio OpenAPI document.

Environment

  • Java — Java 21 remains the minimum supported version, unchanged from previous releases. No action is required.
  • Docker logging — The default log output of the Docker images changed from plain text to ECS JSON. See the Administrators section below to keep the previous format.

Rules Authors

The “Open” button was removed from the rules editor

The Open button has been removed from the rules editor table view. Its earlier behavior of launching Microsoft Excel on the client was discontinued in a previous release. Use the Export module button to download the workbook instead. No project changes are required.

Developers

OpenL Maven Plugin: generated-classes jar in the archive

openl:package now decides automatically whether to embed the project’s generated-classes jar (lib/${finalName}.jar) in the produced archive. The jar is excluded only for a project that both depends on other OpenL projects and runs the generate goal — the combination that previously packed duplicate datatype classes and broke deployment with There is no implementation in rules for interface method .... Every other project keeps the jar as before.

To override the automatic decision, set the new includeGeneratedClasspathJar parameter:

<plugin>
    <groupId>org.openl.rules</groupId>
    <artifactId>openl-maven-plugin</artifactId>
    <configuration>
        <includeGeneratedClasspathJar>true</includeGeneratedClasspathJar>
    </configuration>
</plugin>
  • true — always pack the generated-classes jar into the archive.
  • false — never pack it; datatype classes are regenerated at runtime from the rules.
  • unset (default) — the automatic decision described above. When the jar is excluded, the build log reports it with an override hint.

OpenL Maven Plugin: depend on the compiled classes

openl:package now attaches the jar built from the project classes folder as a supplementary artifact with the classes classifier. When you previously relied on the copy embedded in the archive, declare a normal Maven dependency on this artifact instead:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-openl-project</artifactId>
    <version>1.0.0</version>
    <classifier>classes</classifier>
</dependency>

OpenL Studio OpenAPI document

The OpenAPI document generated by OpenL Studio now serializes deterministically — ordered tags, schemas, paths, and map entries, minItems/maxItems for sized collections, and no implicit Accept, Content-Type, or Authorization header parameters. Regenerate any client or stored specification that is pinned to the previous output and review the diff.

Repository path resolution

Repository path resolution now rejects any path that escapes the repository root with an InvalidPathException. This is a security hardening of file-based repositories and affects only integrations that previously passed absolute paths or .. segments outside the root.

Administrators

Docker log output format

The Docker images route the Jetty server, the web application, and java.util.logging-based libraries through a single Log4j2 logging system. The output format is selected with the LOGGING_FORMAT environment variable, which now defaults to ECS (Elastic Common Schema) JSON on stdout.

To keep the previous human-readable text output, set the format to plain:

LOGGING_FORMAT=plain
LOGGING_LEVEL_ROOT=INFO

Supported LOGGING_FORMAT values:

  • ecs (default) — Elastic Common Schema JSON on stdout for log aggregation tools.
  • plain — human-readable text, the same layout bundled in the .war.
  • none — discard all log events.
  • otel — mute the Log4j2 console and let the OpenTelemetry agent export log events to stdout as OTLP JSON.

LOGGING_LEVEL_ROOT sets the root log level (default INFO). These variables apply only inside the Docker image; non-Docker .war deployments keep their bundled plain-text configuration.