This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch doc/3.x/port-3175
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit d48b1408da02d7033cd9a27fd69368ba4e582e88
Author: Piotr P. Karwasz <piotr.git...@karwasz.org>
AuthorDate: Tue Nov 5 11:34:47 2024 +0100

    Document API compatibility checks (#3175)
    
    This documents the existence of the BND Baseline API compatibility checks 
and how to fix the generated errors.
---
 BUILDING.adoc | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/BUILDING.adoc b/BUILDING.adoc
index 8aec9b3ed3..159322b8d8 100644
--- a/BUILDING.adoc
+++ b/BUILDING.adoc
@@ -144,3 +144,59 @@ Try removing all _"Override compiler parameters 
per-module"_ entries in _"Settin
 === Compilation in IntelliJ IDEA fails with `java: package 
org.apache.logging.log4j.plugins.test.validation.plugins does not exist`
 
 We don't know how to fix this.
+
+[#development-api-compatibility]
+=== Fixing API compatibility check failures
+
+Log4j uses the
+https://github.com/bndtools/bnd/tree/master/maven-plugins/bnd-baseline-maven-plugin[BND
 Baseline Maven Plugin]
+to enforce its
+https://semver.org/[semantic versioning policy].
+Following the
+https://bnd.bndtools.org/chapters/170-versioning.html#best-practices[OSGi 
versioning best practices], both Log4j artifacts and packages are versioned.
+If you modify Log4j's public API, a BND Baseline error like the following will 
occur:
+
+[source]
+----
+  Name                        Type     Delta      New    Old    Suggest  If 
Prov.
+  org.apache.logging.foo      PACKAGE  UNCHANGED  2.1.0  2.1.0  ok       -
+* org.apache.logging.foo.bar  PACKAGE  MINOR      2.3.4  2.3.4  2.4.0    -
+  MINOR        PACKAGE    org.apache.logging.foo.bar
+  ...
+----
+
+The solution of the error depends on the change kind (`Delta`):
+
+[#development-api-compatibility-micro]
+`MICRO`::
++
+For patch level changes modify the `package-info.java` file of the 
`org.apache.logging.foo.bar` package and update the `@Version` annotation to 
the number suggested by BND: increment just the patch number.
++
+[source,java]
+----
+@Version("2.3.5")
+package org.apache.logging.foo.bar;
+----
+
+[#development-api-compatibility-minor]
+`MINOR`::
++
+Changes of type `MINOR` require more work:
++
+--
+* Make sure that the current Log4j version is a minor upgrade over the last 
released version.
+If that is not the case (e.g., it is `2.34.5-SNAPSHOT`) modify the 
`<revision>` property in the main POM file (e.g., change it to 
`2.35.0-SNAPSHOT`).
+* Make sure to add a
+https://logging.apache.org/log4j/tools/log4j-changelog.html#changelog-entry-file[changelog
 entry]
+of type `added`, `changed` or `deprecated` to your PR.
+* As in the
+<<development-api-compatibility-micro,`MICRO` case>>
+modify the `package-info.java` file of the package and update the `@Version` 
annotation to the **next Log4j version** (`2.35.0` in the example) and **not** 
the minimal version number suggested by BND.
+The purpose of this policy is to have an alignment between package versions 
and the last Log4j version, where an API change occurred.
+--
+
+[#development-api-compatibility-major]
+`MAJOR`::
++
+Changes of type `MAJOR` (i.e. breaking changes) are not accepted in the `2.x` 
branch.
+If you believe it is not a breaking change (e.g., you removed a class 
**documented** as private), the development team will guide you on how to solve 
it.

Reply via email to