You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2023/09/11 09:52:30 UTC

[logging-log4j-transform] branch release/0.2.0 created (now ef618cf)

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

vy pushed a change to branch release/0.2.0
in repository https://gitbox.apache.org/repos/asf/logging-log4j-transform.git


      at ef618cf  Facelift for the upcoming `logging-parent` 10.0.0

This branch includes the following new commits:

     new ef618cf  Facelift for the upcoming `logging-parent` 10.0.0

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[logging-log4j-transform] 01/01: Facelift for the upcoming `logging-parent` 10.0.0

Posted by vy...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch release/0.2.0
in repository https://gitbox.apache.org/repos/asf/logging-log4j-transform.git

commit ef618cfc1bc566bfc1f602cc60be262dce5f757c
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Mon Sep 11 11:52:45 2023 +0200

    Facelift for the upcoming `logging-parent` 10.0.0
---
 .asf.yaml                                          |  25 +-
 .editorconfig                                      |  66 +++++
 .gitattributes                                     |  34 +--
 .github/{dependabot.yml => dependabot.yaml}        |   0
 .github/workflows/build.yaml                       |  63 +++++
 .github/workflows/build.yml                        | 210 ----------------
 .gitignore                                         |  10 +-
 .mvn/jvm.config                                    |   1 -
 .mvn/wrapper/maven-wrapper.properties              |   4 +-
 CHANGELOG.adoc                                     |   6 -
 LICENSE.txt                                        |   2 +-
 NOTICE.txt                                         |   5 +
 .../0.1.0/.release.xml => RELEASE-NOTES.md         |  11 +-
 RELEASING.adoc                                     | 133 +++++-----
 log4j-transform-maven-plugin/pom.xml               |  48 +++-
 .../src/doc/process-classes-mojo.adoc              |  46 ++--
 .../src/it/location/pom.xml                        |  19 +-
 .../logging/log4j/transform/maven/it/Main.java     |   9 +-
 .../logging/log4j/transform/maven/it/MainTest.java |   5 +-
 .../src/it/pomproject/pom.xml                      |  10 +-
 .../log4j/transform/maven/LocationMojo.java        |   1 +
 .../maven/scan/ClassFileInclusionScanner.java      |   5 +-
 .../maven/scan/SimpleInclusionScanner.java         |   1 +
 .../pom.xml                                        |  15 +-
 log4j-transform-parent/pom.xml                     | 155 +++---------
 log4j-transform-perf/pom.xml                       |  17 ++
 log4j-weaver/pom.xml                               |  20 ++
 mvnw                                               | 178 ++++++++------
 mvnw.cmd                                           |  24 +-
 pom.xml                                            | 272 ++++++---------------
 spotless-license-header.txt                        |  16 ++
 src/assembly/source-release.xml                    |  46 ----
 .../{0.1.0/.release.xml => .changelog.md.ftl}      |  17 +-
 ...plugin_to_inline_location.xml => .index.md.ftl} |  16 +-
 ...o_inline_location.xml => .release-notes.md.ftl} |  16 +-
 src/changelog/0.1.0/.release.xml                   |   2 +-
 ...638_Provide_Maven_plugin_to_inline_location.xml |  11 +-
 ...LOG4J2-673_Maven_Shade_resource_transformer.xml |  14 +-
 .../.release-notes.md.ftl}                         |  17 +-
 src/changelog/{0.1.0 => 0.2.0}/.release.xml        |   4 +-
 src/changelog/CHANGELOG.adoc.ftl                   |  84 -------
 41 files changed, 678 insertions(+), 960 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 5120251..c7c9e33 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -1,17 +1,19 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
+# contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
+# The ASF licenses this file to you under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
+# the License.  You may obtain a copy of the License at
 #
-#      https://www.apache.org/licenses/LICENSE-2.0
+#      http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+#
 
 # `.asf.yaml` documentation: https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features
 
@@ -32,18 +34,3 @@ github:
   protected_branches:
     main:
       required_signatures: true
-  # Attempt to make the auto-generated github emails more easily readable in email clients.
-  custom_subjects:
-    new_pr: "[PR] {title} ({repository})"
-    close_pr: "Re: [PR] {title} ({repository})"
-    comment_pr: "Re: [PR] {title} ({repository})"
-    diffcomment: "Re: [PR] {title} ({repository})"
-    merge_pr: "Re: [PR] {title} ({repository})"
-    new_issue: "[I] {title} ({repository})"
-    comment_issue: "Re: [I] {title} ({repository})"
-    close_issue: "Re: [I] {title} ({repository})"
-    catchall: "[GH] {title} ({repository})"
-notifications:
-  commits: commits@logging.apache.org
-  issues: notifications@logging.apache.org
-  pullrequests: notifications@logging.apache.org
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6c3d154
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,66 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Configuration here must match the one for Spotless in `pom.xml`!
+
+root = true
+
+[*]
+indent_size = 4
+ij_continuation_indent_size = 8
+indent_style = space
+trim_trailing_whitespace = true
+
+# `ij_any_use_relative_indents = true` is deliberately left out since it messes up the indentation in ternary operator usages
+
+# Split some things over multiple lines to keep lines short
+ij_any_call_parameters_wrap = on_every_item
+ij_any_method_parameters_wrap = on_every_item
+ij_any_method_call_chain_wrap = on_every_item
+
+# Don't align with the first line to avoid single-line changes having an impact in the rest of the code
+ij_any_align_multiline_parameters_in_calls = false
+ij_any_align_multiline_parameters = false
+ij_any_align_multiline_chained_methods = false
+
+# Only use `import *` when importing 5 or more
+ij_java_names_count_to_use_import_on_demand = 5
+ij_java_class_count_to_use_import_on_demand = 5
+
+# Order imports
+# `*` denotes any packages except explicitly specified ones
+# `|` denotes a blank line
+# `$` denotes the prefix for static packages
+# `**` means including subpackages
+ij_java_imports_layout = java.**, |, javax.**, |, org.apache.logging.**, |, *, |, $java.**, |, $javax.**, |, $org.apache.logging.**, |, $*
+
+# Force curly braces
+ij_any_for_brace_force = always
+ij_any_if_brace_force = always
+ij_any_do_while_brace_force = always
+ij_any_while_brace_force = always
+
+# Don't align parameters and exceptions in javadoc based on the longest names to avoid single-line changes having an impact in the rest of the code
+ij_java_doc_align_param_comments = false
+ij_java_doc_align_exception_comments = false
+
+[*.{xml,xsd,properties,yml,yaml,json}]
+indent_size = 2
+
+[*.{md,adoc}]
+indent_size = 2
+ij_any_wrap_long_lines = false
+# The `no` value doesn't work in IntelliJ IDEA so a big number does the trick as well in most cases:
+max_line_length = 9999
diff --git a/.gitattributes b/.gitattributes
index cd39f9b..10914c1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,14 +1,20 @@
-##
-# Every file recognized as text should use LF
-* text=auto eol=lf
-# These are checked by Spotless
-*.java       text eol=lf
-*.properties text eol=lf
-*.xml        text eol=lf
-*.yaml       text eol=lf
-*.yml        text eol=lf
-# Maven Wrapper need LF line endings
-/.mvn/wrapper/maven-wrapper.properties eol=lf
-# Maven Wrapper scripts
-/mvnw     text eol=lf
-/mvnw.cmd text eol=crlf
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Checked by Spotless (LF line endings)
+*.java text eol=lf
+*.xml  text eol=lf
+*.yaml text eol=lf
+*.yml  text eol=lf
diff --git a/.github/dependabot.yml b/.github/dependabot.yaml
similarity index 100%
rename from .github/dependabot.yml
rename to .github/dependabot.yaml
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 0000000..9b1b20e
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,63 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: build
+
+on:
+  push:
+    # Avoid workflow run for _merged_ `dependabot` PRs.
+    # They were (hopefully!) already tested in PR-triggered workflow.
+    branches-ignore:
+      - "dependabot/**"
+    paths-ignore:
+      - "**.adoc"
+      - "**.md"
+      - "**.txt"
+  pull_request:
+    paths-ignore:
+      - "**.adoc"
+      - "**.md"
+      - "**.txt"
+
+permissions: read-all
+
+jobs:
+
+  build:
+    uses: apache/logging-parent/.github/workflows/build-reusable.yaml@main
+    # Write permissions to allow merge of `dependabot` PRs
+    permissions:
+      contents: write
+      pull-requests: write
+
+  deploy-snapshot:
+    needs: build
+    if: github.repository == 'apache/logging-log4j-transform' && github.ref == 'refs/heads/main'
+    uses: apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@main
+    secrets: inherit
+
+  deploy-release:
+    needs: build
+    if: github.repository == 'apache/logging-log4j-transform' && startsWith(github.ref, 'refs/heads/release/')
+    uses: apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@main
+    secrets: inherit
+    # Write permissions to allow the Maven `revision` property update, changelog release, etc.
+    permissions:
+      contents: write
+    with:
+      project-name: log4j-transform
+      distribution-attachment-count: 4
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index 267dfb5..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,210 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to you under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-name: build
-
-on:
-  push:
-    # Avoid workflow run for _merged_ `dependabot` PRs.
-    # They were (hopefully!) already tested in PR-triggered workflow.
-    branches-ignore: "dependabot/**"
-  pull_request:
-    paths-ignore:
-      - "**.adoc"
-      - "**.md"
-      - "**.txt"
-
-permissions: read-all
-
-jobs:
-
-  build:
-
-    runs-on: ${{ matrix.os }}
-
-    strategy:
-      matrix:
-        os: [ macos-latest, ubuntu-latest, windows-latest ]
-
-    steps:
-
-      - name: Checkout repository
-        uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac   # 4.0.0
-
-      - name: Setup JDK 8 and 17
-        uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2   # 3.7.0
-        with:
-          distribution: temurin
-          java-version: |
-            8
-            17
-          java-package: jdk
-          architecture: x64
-          cache: maven
-
-      # We could have used `verify`, but `clean install` is required while generating the build reproducibility report, which is performed in the next step.
-      # For details, see: https://maven.apache.org/guides/mini/guide-reproducible-builds.html#how-to-test-my-maven-build-reproducibility
-      - name: Build
-        shell: bash
-        run: |
-          ./mvnw \
-            --show-version --batch-mode --errors --no-transfer-progress \
-            -DtrimStackTrace=false \
-            -DinstallAtEnd=true \
-            -Pjava8-tests \
-            clean install
-
-      # `clean verify artifact:compare` is required to generate the build reproducibility report.
-      # For details, see: https://maven.apache.org/guides/mini/guide-reproducible-builds.html#how-to-test-my-maven-build-reproducibility
-      - name: Report build reproducibility
-        id: report-reproducible
-        timeout-minutes: 10
-        shell: bash
-        run: |
-          ./mvnw \
-            --show-version --batch-mode --errors --no-transfer-progress \
-            -DskipTests=true \
-            clean verify artifact:compare
-
-      - name: Upload reproducibility failure context artifacts
-        if: failure()
-        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce   # 3.1.2
-        with:
-          name: reproducibility-failure-context-${{matrix.os}}
-          path: |
-            **/target/*.buildcompare
-            **/target/*.jar
-            **/target/reference/*.jar
-
-  merge:
-
-    runs-on: ubuntu-latest
-    if: github.event_name == 'pull_request' && github.actor == 'dependabot[bot]'
-    needs: build
-    permissions:
-      contents: write
-      pull-requests: write
-
-    steps:
-      - name: "[dependabot] Auto-merge the PR"
-        run: gh pr merge --auto --squash "$PR_URL"
-        env:
-          PR_URL: ${{ github.event.pull_request.html_url }}
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
-  deploy:
-
-    runs-on: ubuntu-latest
-    needs: build
-    if: github.repository == 'apache/logging-log4j-transform' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/'))
-    permissions:
-      contents: write
-
-    steps:
-
-      - name: Checkout repository
-        uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac   # 4.0.0
-
-      - name: Set up Java & GPG
-        uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2   # 3.7.0
-        with:
-          distribution: temurin
-          java-version: 17
-          java-package: jdk
-          architecture: x64
-          cache: maven
-          server-id: ${{ github.ref == 'refs/heads/main' && 'apache.snapshots.https' || 'apache.releases.https' }}
-          server-username: NEXUS_USERNAME
-          server-password: NEXUS_PASSWORD
-          # We won't use `maven-gpg-plugin`, but this is convenient to import the GPG secret key
-          gpg-private-key: ${{ secrets.GPG_SECRET_KEY }}
-
-      - name: Export artifact version
-        run: |
-          export PROJECT_VERSION=$(./mvnw \
-            --quiet --batch-mode -DforceStdout=true \
-            -Dexpression=project.version \
-            help:evaluate \
-            | tail -n 1)
-          echo "PROJECT_VERSION=$PROJECT_VERSION" >> $GITHUB_ENV
-
-      - name: Check version (SNAPSHOT)
-        if: github.ref == 'refs/heads/main'
-        run: |
-          [[ "$PROJECT_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+-SNAPSHOT$ ]] || {
-            echo "was expecting a snapshot version, found: \"$PROJECT_VERSION\"" 1>&2
-            exit 1
-          }
-
-      - name: Check version (RELEASE)
-        if: startsWith(github.ref, 'refs/heads/release/')
-        run: |
-          [[ "${GITHUB_REF/refs\/heads\/release\//}" == "$PROJECT_VERSION" ]] || {
-            echo "git ref \"$GITHUB_REF\" mismatches with the version: \"$PROJECT_VERSION\"" 1>&2
-            exit 1
-          }
-          [[ "$PROJECT_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || {
-            echo "was expecting a release version, found: \"$PROJECT_VERSION\"" 1>&2
-            exit 1
-          }
-          export CHANGELOG_VERSION=$(grep "^= " CHANGELOG.adoc | head -n 1 | sed -r 's/^= (.+) \(.+\)$/\1/')
-          [[ "$PROJECT_VERSION" == "$CHANGELOG_VERSION" ]] || {
-            echo "version \"$PROJECT_VERSION\" doesn't match the one in changelog: \"$CHANGELOG_VERSION\"" 1>&2
-            exit 1
-          }
-          export EXPECTED_DATE=$(date --date="now + 3 days" +%Y-%m-%d)
-          export CHANGELOG_DATE=$(grep "^= " CHANGELOG.adoc | head -n 1 | sed -r 's/^= .+ \((.+)\)$/\1/')
-          [[ "$EXPECTED_DATE" == "$CHANGELOG_DATE" ]] || {
-            echo "expected release date \"$EXPECTED_DATE\" doesn't match the one in the changelog: \"$CHANGELOG_DATE\"" 1>&2
-            exit 1
-          }
-
-      - name: Deploy
-        run: |
-          gpg --list-secret-keys
-          ./mvnw \
-            --show-version --batch-mode --errors --no-transfer-progress \
-            -P release
-        env:
-          # `NEXUS_USERNAME` and `NEXUS_PASSWORD` are used in `~/.m2/settings.xml` created by `setup-java` action
-          NEXUS_USERNAME: ${{ github.ref == 'refs/heads/main' && secrets.NEXUS_USER || secrets.LOGGING_STAGE_DEPLOYER_USER }}
-          NEXUS_PASSWORD: ${{ github.ref == 'refs/heads/main' && secrets.NEXUS_PW || secrets.LOGGING_STAGE_DEPLOYER_PW }}
-          # `SIGN_KEY` is used by `sign-maven-plugin`
-          SIGN_KEY: ${{ secrets.GPG_SECRET_KEY }}
-
-      - name: Sign artifacts (RELEASE)
-        if: startsWith(github.ref, 'refs/heads/release/')
-        run: |
-          gpg --armor --detach-sign --yes --pinentry-mode error "target/apache-log4j-transform-${PROJECT_VERSION}-src.zip"
-
-      - name: Upload artifacts (RELEASE)
-        if: startsWith(github.ref, 'refs/heads/release/')
-        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce   # 3.1.2
-        with:
-          name: Sources
-          path: target/apache-log4j-transform-*-src.zip*
-          if-no-file-found: error
-
-      - name: Tag version (RELEASE)
-        if: startsWith(github.ref, 'refs/heads/release/')
-        run: |
-          export RCN=$[ $(git tag -l "rel/$PROJECT_VERSION[-.]rc*" | wc -l) + 1 ]
-          export TAG="rel/$PROJECT_VERSION-rc$RCN"
-          git config user.name github-actions
-          git config user.email github-actions@github.com
-          git tag "$TAG" -m ""
-          git push origin "$TAG"
diff --git a/.gitignore b/.gitignore
index 7a0958c..d67ee40 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,16 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-## Keep in sync with src/assembly/source-assembly.xml
 target/
-# IntelliJ IDEA
 .idea
 *.iml
 *.iws
+/out
+.flattened-pom.xml
+/.mvn/wrapper/maven-wrapper.jar
 # Eclipse
-.classpath
 .project
+.classpath
 .settings/
-# Maven wrapper
-/.mvn/wrapper/maven-wrapper.jar
-
diff --git a/.mvn/jvm.config b/.mvn/jvm.config
index 8418f94..6f7d1c8 100644
--- a/.mvn/jvm.config
+++ b/.mvn/jvm.config
@@ -1,4 +1,3 @@
--Daether.checksums.algorithms=SHA-512,SHA-256,SHA-1,MD5
 -Djava.awt.headless=true
 --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
 --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index ca5ab4b..43a7228 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.0/apache-maven-3.9.0-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
deleted file mode 100644
index 91dde4e..0000000
--- a/CHANGELOG.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= 0.1.0 (2023-05-05)
-
-== Added
-
-* https://issues.apache.org/jira/browse/LOG4J2-3638[LOG4J2-3638]: Add bytecode transformation tool to provide location information without reflection. (https://github.com/ppkarwasz[pkarwasz])
-* https://issues.apache.org/jira/browse/LOG4J2-673[LOG4J2-673]: Add resource transformer for the Maven Shade Plugin to merge `Log4j2Plugins.dat` plugin caches. Thanks to https://github.com/edwgiz[Eduard Gizatullin]. (https://github.com/ppkarwasz[pkarwasz])
diff --git a/LICENSE.txt b/LICENSE.txt
index 6279e52..d645695 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -187,7 +187,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 1999-2005 The Apache Software Foundation
+   Copyright [yyyy] [name of copyright owner]
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
diff --git a/NOTICE.txt b/NOTICE.txt
new file mode 100644
index 0000000..a6e8c2b
--- /dev/null
+++ b/NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Log4j Tools
+Copyright 2022-2023 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/src/changelog/0.1.0/.release.xml b/RELEASE-NOTES.md
similarity index 69%
copy from src/changelog/0.1.0/.release.xml
copy to RELEASE-NOTES.md
index 42b5807..a37d693 100644
--- a/src/changelog/0.1.0/.release.xml
+++ b/RELEASE-NOTES.md
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -15,7 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<release xmlns="http://logging.apache.org/log4j/changelog"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.0.xsd"
-         date="2023-05-05" version="0.1.0"/>
+
+This project uses itself, i.e., `log4j-changelog-maven-plugin`, for keeping a changelog and generating release notes.
+
+Changelog files are located under [`src/changelog`](src/changelog).
+Release notes can be generated using `./mvnw -N -P changelog-export` command.
+See [`log4j-changelog-maven-plugin`](log4j-changelog-maven-plugin) for details on how it all works.
diff --git a/RELEASING.adoc b/RELEASING.adoc
index 6de2578..20316ae 100644
--- a/RELEASING.adoc
+++ b/RELEASING.adoc
@@ -15,6 +15,25 @@ See the License for the specific language governing permissions and
 limitations under the License.
 ////
 
+// ██     ██  █████  ██████  ███    ██ ██ ███    ██  ██████  ██
+// ██     ██ ██   ██ ██   ██ ████   ██ ██ ████   ██ ██       ██
+// ██  █  ██ ███████ ██████  ██ ██  ██ ██ ██ ██  ██ ██   ███ ██
+// ██ ███ ██ ██   ██ ██   ██ ██  ██ ██ ██ ██  ██ ██ ██    ██
+//  ███ ███  ██   ██ ██   ██ ██   ████ ██ ██   ████  ██████  ██
+//
+// Below instructions are shared by all Maven-based Apache Logging Services projects.
+// Be extremely cautious while making changes!
+
+// Configuration ///////////////////////////////////////////////////////////////
+
+// Name of the GitHub repository; `logging-parent`, `logging-log4j2`, `logging-log4j-tools`, etc.
+:repository-name: logging-log4j-transform
+
+// Name of the project; `logging-parent`, `log4j`, `log4j-tools`
+:project-name: log4j-transform
+
+// Instructions ////////////////////////////////////////////////////////////////
+
 = Release instructions
 
 [WARNING]
@@ -22,90 +41,77 @@ limitations under the License.
 In the code examples below, assuming the version to be released is `7.8.0`.
 ====
 
-== Stage the release artifacts
+== Stage the release
 
-. Checkout the release branch: `git checkout -B release/7.8.0 origin/master`
-. Perform and commit following changes:
-.. Set the `revision` property to `7.8.0` in xref:pom.xml[`pom.xml`]
-.. Set the `project.build.outputTimestamp` in xref:pom.xml[`pom.xml`] and xref:log4j-transform-parent/pom.xml[`log4j-transform-parent/pom.xml`] to the expected release date (72 hours from now)
-.. Release and export the changelog:
+. Create and push the release branch:
 +
-[source,console]
+[source,bash]
 ----
-./mvnw -N -Dlog4j.changelog.releaseVersion=0.1.0 log4j-changelog:release log4j-changelog:export
+git fetch -p
+git checkout -B release/7.8.0 origin/main
+git push origin release/7.8.0
 ----
-+
-. Make sure that `./mvnw clean verify` succeeds – if not, commit necessary fixes
-. Push the `release/7.8.0` branch
-. Make sure the associated https://github.com/apache/logging-log4j-tools/actions[GitHub Actions workflow] succeeds:
+. Verify that the associated https://github.com/apache/{repository-name}/actions[GitHub Actions workflow] succeeds:
+.. `revision` property in `pom.xml` is updated
+.. Changelog is released (i.e., `src/changelog/7.8.0` folder is populated)
 .. *Signed artifacts* are uploaded to the _Staging Repositories_ in https://repository.apache.org/[repository.apache.org]
-.. *Signed sources and their checksum* are uploaded as GitHub Actions workflow artifacts
-.. `*rel/7.8.0-rc1*` git tag should be created
-+
-[IMPORTANT]
-====
-The ASF infrastructure treats ``rel/``-prefixed git tags special and ensures they are immutable for provenance reasons.
-To make the above operation idempotent and allow retries, the release candidate enumeration used in the tag will be incremented automatically; `rel/7.8.0-rc1`, `rel/7.8.0-rc2`, etc.
-====
+.. *Signed distribution and its checksum* (e.g., `apache-{project-name}-7.8.0-{bin,src}.{zip,.zip.asc,.zip.sha512}`) are uploaded to https://dist.apache.org/repos/dist/dev/logging/log4j[dist.apache.org/repos/dist/**dev**/logging/log4j] Subversion repository (along with auxiliary files; email texts, etc.)
 
 +
 If not, commit necessary fixes, push, and repeat.
+
++
+[TIP]
+====
+GitHub Actions workflow is idempotent.
+You can iterate on the `release/7.8.0` branch to perfect it.
+====
 . _Close_ the repository in https://repository.apache.org/[repository.apache.org]
-. Commit _the signed sources and their checksum_ (e.g., `apache-log4j-transform-7.8.0-src.{zip,.zip.asc,.zip.sha512}`) to https://dist.apache.org/repos/dist/dev/logging/log4j[dist.apache.org/repos/dist/**dev**/logging/log4j] Subversion repository and delete any artifacts from old releases
 
 == Vote the release
 
-Collect release votes via email using the following template:
-
-.`[VOTE] Release Apache Log4j Transformation Tools 7.8.0` titled email to `dev@logging.apache.org`
-[source]
-----
-The Apache Log4j Transformation Tools 7.8.0 release is now available for voting.
-
-This release contains minor enhancements and bug fixes.
-
-Source repository: https://github.com/apache/logging-log4j-transform
-Tag: rel/7.8.0-rc1
-Commit: e82a44142280d013bd76ea18951fde00dcee192b
-Artifacts: https://dist.apache.org/repos/dist/dev/logging/log4j/
-Nexus repository: https://repository.apache.org/content/repositories/orgapachelogging-1096
-Signing key: https://keyserver.ubuntu.com/pks/lookup?search=077e8893a6dcc33dd4a4d5b256e73ba9a0b592d0&fingerprint=on&op=index
-
-Please download, test, and cast your votes on the Log4j developers list.
-
-[ ] +1, release the artifacts
-[ ] -1, don't release, because...
-
-The vote will remain open for 72 hours (or more if required). All votes are welcome and we encourage everyone to test the release, but only the Logging Services PMC votes are officially counted. At least 3 +1 votes and more positive than negative votes are required.
-----
-
+. Send the vote email uploaded to the https://dist.apache.org/repos/dist/dev/logging/log4j[dist.apache.org/repos/dist/**dev**/logging/log4j] Subversion repository
++
+[WARNING]
+====
+**Fix the cited https://repository.apache.org[repository.apache.org] URL** in the generated email!
+It changes after every Nexus deployment.
+====
++
 [WARNING]
 ====
 Make sure your email is sent in plain text, that is, https://infra.apache.org/contrib-email-tips#nohtml[no HTML]!
 If you are using GMail, simply enable the _"Plain text mode"_ while composing your message.
 ====
 
-Once the consensus is reached within the set time frame, respond to the first post in the thread as follows:
-
+. Once the consensus is reached within the set time frame, respond to the first post in the thread as follows:
++
 [source]
 ----
 Adding my +1.
 
-With that, the release passes with 3 binding +1 votes from A, B and me.
+With that, the release passes with 3 binding +1 votes from <PMC-member-1>, ..., <PMC-member-N>, and me.
+I will continue the release process.
 ----
 
 == Publish the release
 
-=== In git repository
+=== In the git repository
 
 . Pull the most recent changes and tags
 . Tag the release (e.g., `rel/7.8.0`) and push it
 +
+[source,bash]
+----
+git tag -a rel/7.8.0 <COMMIT-ID> -m 7.8.0
+git push origin rel/7.8.0
+----
++
 [IMPORTANT]
 ====
 The ASF infrastructure treats ``rel/``-prefixed git tags special and ensures they are immutable for provenance reasons.
 ====
-. Merge `release/7.8.0` changes to `main`
+. Merge `release/7.8.0` to `main`
 . Set the revision property to the next development version (e.g., `7.9.0-SNAPSHOT`) in xref:pom.xml[`pom.xml`]
 . Commit changes and push the `main` branch
 . Delete the local and remote copies of the `release/7.8.0` branch
@@ -113,24 +119,25 @@ The ASF infrastructure treats ``rel/``-prefixed git tags special and ensures the
 === In the ASF infrastructure
 
 . _Release_ the repository in https://reporter.apache.org/addrelease.html?logging[repository.apache.org]
-. In https://dist.apache.org/repos/dist/release/logging/log4j[dist.apache.org/repos/dist] Subversion repository,
-.. move the signed sources and their checksum from `*dev*/logging/log4j` directory to `*release*/logging/log4j-tools/7.8.0`
-.. delete the folder from an earlier release in `*release*/logging/log4j-tools`
+. In https://dist.apache.org/repos/dist/release/logging/{project-name}[dist.apache.org/repos/dist] Subversion repository,
+.. create the `*release*/logging/{project-name}/7.8.0` folder, and copy the signed sources and their checksum from `*dev*/logging/{project-name}` to there
+.. delete the folder from an earlier release in `*release*/logging/{project-name}`
 .. commit changes
 . Report the release at https://reporter.apache.org/[reporter.apache.org]
 
 === In GitHub
 
-Once the artifacts are visible in https://central.sonatype.dev/[central.sonatype.dev], https://github.com/apache/logging-log4j-tools/releases/new[create a new release in GitHub]
+Once the artifacts are visible in https://central.sonatype.dev/[central.sonatype.dev], https://github.com/apache/{repository-name}/releases/new[create a new release in GitHub]
 
 . Use the `rel/7.8.0` tag
-. Copy necessary changes from xref:CHANGELOG.adoc[`CHANGELOG.adoc`]
-.. formatting needs to be converted from AsciiDoc to https://github.github.com/gfm/[GitHub Flavored Markdown]
-.. GitHub Issue links need to be converted from
-+
-[source]
-----
-https://github.com/apache/logging-log4j-transform/issues/19[#19]
-----
+. Copy release notes from the generated emails
+
+== Announce the release
+
+. Send the announcement email uploaded to the https://dist.apache.org/repos/dist/dev/logging/{project-name}[dist.apache.org/repos/dist/**dev**/logging/{project-name}] Subversion repository
 +
-AsciiDoc-formatted links to simply `#19`
+[WARNING]
+====
+Make sure your email is sent in plain text, that is, https://infra.apache.org/contrib-email-tips#nohtml[no HTML]!
+If you are using GMail, simply enable the _"Plain text mode"_ while composing your message.
+====
diff --git a/log4j-transform-maven-plugin/pom.xml b/log4j-transform-maven-plugin/pom.xml
index ec506f8..89aea7a 100644
--- a/log4j-transform-maven-plugin/pom.xml
+++ b/log4j-transform-maven-plugin/pom.xml
@@ -16,44 +16,57 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-transform-parent</artifactId>
     <version>${revision}</version>
     <relativePath>../log4j-transform-parent</relativePath>
   </parent>
+
   <artifactId>log4j-transform-maven-plugin</artifactId>
   <packaging>maven-plugin</packaging>
+
   <name>Apache Log4j Transform Maven plugin</name>
   <description>The Apache Log4j Transform Maven plugin</description>
+
   <dependencies>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-weaver</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-core</artifactId>
       <scope>provided</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.maven.plugin-tools</groupId>
       <artifactId>maven-plugin-annotations</artifactId>
       <scope>provided</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-plugin-api</artifactId>
       <scope>provided</scope>
     </dependency>
+
   </dependencies>
+
   <build>
     <plugins>
+
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
@@ -61,26 +74,27 @@
           <skip>true</skip>
         </configuration>
       </plugin>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
-        <configuration>
-          <cloneProjectsTo>${project.build.directory}/its</cloneProjectsTo>
-          <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
-          <goals>
-            <goal>clean verify</goal>
-          </goals>
-        </configuration>
         <executions>
           <execution>
+            <id>invoke-its</id>
             <goals>
               <goal>install</goal>
               <goal>integration-test</goal>
               <goal>verify</goal>
             </goals>
+            <phase>integration-test</phase>
+            <configuration>
+              <cloneProjectsTo>${project.build.directory}/its</cloneProjectsTo>
+              <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
+            </configuration>
           </execution>
         </executions>
       </plugin>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
@@ -93,6 +107,7 @@
           </execution>
         </executions>
       </plugin>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-plugin-plugin</artifactId>
@@ -100,6 +115,25 @@
           <goalPrefix>log4j-transform</goalPrefix>
         </configuration>
       </plugin>
+
     </plugins>
   </build>
+
+  <profiles>
+
+    <!-- disable `maven-invoker-plugin` if `skipTests` is present -->
+    <profile>
+      <id>invoker-toggle</id>
+      <activation>
+        <property>
+          <name>skipTests</name>
+        </property>
+      </activation>
+      <properties>
+        <invoker.skip>true</invoker.skip>
+      </properties>
+    </profile>
+
+  </profiles>
+
 </project>
diff --git a/log4j-transform-maven-plugin/src/doc/process-classes-mojo.adoc b/log4j-transform-maven-plugin/src/doc/process-classes-mojo.adoc
index a353573..b310e23 100644
--- a/log4j-transform-maven-plugin/src/doc/process-classes-mojo.adoc
+++ b/log4j-transform-maven-plugin/src/doc/process-classes-mojo.adoc
@@ -14,67 +14,57 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-= log4j-transform:process-classes
+= `log4j-transform:process-classes`
 
-*Full name*:
+Full name::
 
-org.apache.logging.log4j:log4j-transform-maven-plugin:0.1.0:process-classes
+`org.apache.logging.log4j:log4j-transform-maven-plugin:0.1.0:process-classes`
 
-*Description*:
+Description::
 
-Generates static location information of Log4j 2.x API calls in the project classes. The resulting bytecode will no rely on runtime resolution of location information.
+Generates static location information of Log4j 2.x API calls in the project classes.
+The resulting bytecode will not rely on runtime resolution of the location information.
 
-*Attributes*:
+Attributes::
 
- * Requires a Maven project to be executed.
- * Requires dependency resolution of artifacts in scope: <code>compile</code>.
- * The goal is thread-safe and supports parallel builds.
+ * Requires a Maven project to be executed
+ * Requires dependency resolution of artifacts in scope: `<code>compile</code>`
+ * The goal is thread-safe and supports parallel builds
  * Binds by default to the http://maven.apache.org/ref/current/maven-core/lifecycles.html[lifecycle phase]: `process-classes`.
 
 == Required Parameters
 
-[cols="1,1,1,10"]
+[cols="3,3,10"]
 |===
-|Name|Type|Since|Description
+|Name|Type|Description
 
 |`<sourceDirectory>`
 |`File`
-|-
 | The directory containing classes to be processed.
-
-*Default value*: `${project.build.outputDirectory}`
+It defaults to `${project.build.outputDirectory}`.
 
 |`<sourceDirectory>`
 |`File`
-|-
 | The directory where woven classes will be written.
-
-*Default value*; `${project.build.outputDirectory}`
+It defaults to `${project.build.outputDirectory}`.
 |===
 
 == Optional Parameters
 
-[cols="1,1,1,10"]
+[cols="3,3,10"]
 |===
-|Name|Type|Since|Description
+|Name|Type|Description
 
 |`<includes>`
 |`List<String>`
-|-
 | Files to include. If empty all class files will be processed.
 
 |`<excludes>`
 |`List<String>`
-|-
 | Files to exclude.
 
 |`<staleMillis>`
 |`int`
-|-
-| Sets the granularity in milliseconds of the last modification date for testing whether a class file needs weaving.
-
-*Default value is*: `0`.
-
-*User property is*: `lastModGranularityMs`.
-
+| Sets the granularity in milliseconds of the last modification date for testing if a class file needs weaving.
+It defaults to `0` and can be configured using the `lastModGranularityMs` property.
 |===
diff --git a/log4j-transform-maven-plugin/src/it/location/pom.xml b/log4j-transform-maven-plugin/src/it/location/pom.xml
index e6a106a..27ea6e4 100644
--- a/log4j-transform-maven-plugin/src/it/location/pom.xml
+++ b/log4j-transform-maven-plugin/src/it/location/pom.xml
@@ -16,25 +16,29 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging</groupId>
     <artifactId>logging-parent</artifactId>
-    <version>9</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath />
   </parent>
+
   <groupId>org.apache.logging.log4j.maven.it</groupId>
   <artifactId>log4j-maven-it-location</artifactId>
   <version>@project.version@</version>
   <packaging>jar</packaging>
-  <name>Apache Log4j Maven plugin test</name>
-  <description>The Apache Log4j Maven plugin test</description>
+
   <properties>
     <junit.version>5.9.3</junit.version>
     <log4j2.version>2.20.0</log4j2.version>
   </properties>
+
   <dependencyManagement>
     <dependencies>
+
       <dependency>
         <groupId>org.junit</groupId>
         <artifactId>junit-bom</artifactId>
@@ -42,6 +46,7 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-bom</artifactId>
@@ -50,23 +55,30 @@
         <scope>import</scope>
       </dependency>
     </dependencies>
+
   </dependencyManagement>
+
   <dependencies>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
       <scope>runtime</scope>
     </dependency>
+
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
+
   </dependencies>
+
   <build>
     <plugins>
       <plugin>
@@ -83,4 +95,5 @@
       </plugin>
     </plugins>
   </build>
+
 </project>
diff --git a/log4j-transform-maven-plugin/src/it/location/src/main/java/org/apache/logging/log4j/transform/maven/it/Main.java b/log4j-transform-maven-plugin/src/it/location/src/main/java/org/apache/logging/log4j/transform/maven/it/Main.java
index ff429c8..cdc6ff9 100644
--- a/log4j-transform-maven-plugin/src/it/location/src/main/java/org/apache/logging/log4j/transform/maven/it/Main.java
+++ b/log4j-transform-maven-plugin/src/it/location/src/main/java/org/apache/logging/log4j/transform/maven/it/Main.java
@@ -21,15 +21,16 @@ import org.apache.logging.log4j.Logger;
 
 public class Main implements Runnable {
 
-    private static final Logger logger = LogManager.getLogger();
+    private static final Logger LOGGER = LogManager.getLogger();
 
     public static void main(String[] args) {
-        logger.info("Application starts");
+        LOGGER.info("Application starts");
         new Main().run();
-        logger.info("Application stops");
+        LOGGER.info("Application stops");
     }
 
     public void run() {
-        logger.info("Another log message");
+        LOGGER.info("Another log message");
     }
+
 }
diff --git a/log4j-transform-maven-plugin/src/it/location/src/test/java/org/apache/logging/log4j/transform/maven/it/MainTest.java b/log4j-transform-maven-plugin/src/it/location/src/test/java/org/apache/logging/log4j/transform/maven/it/MainTest.java
index fd4e97b..9fd886c 100644
--- a/log4j-transform-maven-plugin/src/it/location/src/test/java/org/apache/logging/log4j/transform/maven/it/MainTest.java
+++ b/log4j-transform-maven-plugin/src/it/location/src/test/java/org/apache/logging/log4j/transform/maven/it/MainTest.java
@@ -18,12 +18,13 @@ package org.apache.logging.log4j.transform.maven.it;
 
 import org.junit.jupiter.api.Test;
 
-public class MainTest {
+class MainTest {
 
     private static final String[] ARGS = {"Hello", "Log4j2"};
 
     @Test
-    public void testDoesNotThrow() {
+    void testDoesNotThrow() {
         Main.main(ARGS);
     }
+
 }
diff --git a/log4j-transform-maven-plugin/src/it/pomproject/pom.xml b/log4j-transform-maven-plugin/src/it/pomproject/pom.xml
index 14ff1a2..1941bde 100644
--- a/log4j-transform-maven-plugin/src/it/pomproject/pom.xml
+++ b/log4j-transform-maven-plugin/src/it/pomproject/pom.xml
@@ -16,22 +16,25 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging</groupId>
     <artifactId>logging-parent</artifactId>
-    <version>9</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath />
   </parent>
+
   <groupId>org.apache.logging.log4j.maven.it</groupId>
   <artifactId>log4j-maven-it-pomproject</artifactId>
   <version>@project.version@</version>
   <packaging>pom</packaging>
-  <name>Apache Log4j Maven plugin test</name>
-  <description>The Apache Log4j Maven plugin test</description>
+
   <properties>
     <log4j2.version>2.20.0</log4j2.version>
   </properties>
+
   <build>
     <plugins>
       <plugin>
@@ -48,4 +51,5 @@
       </plugin>
     </plugins>
   </build>
+
 </project>
diff --git a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/LocationMojo.java b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/LocationMojo.java
index 97af70c..1a96f8a 100644
--- a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/LocationMojo.java
+++ b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/LocationMojo.java
@@ -221,4 +221,5 @@ public class LocationMojo extends AbstractMojo {
         }
         return new URLClassLoader(urls.toArray(EMPTY_URL_ARRAY));
     }
+
 }
diff --git a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/ClassFileInclusionScanner.java b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/ClassFileInclusionScanner.java
index 73e90a1..16cc095 100644
--- a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/ClassFileInclusionScanner.java
+++ b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/ClassFileInclusionScanner.java
@@ -23,8 +23,8 @@ import org.apache.logging.log4j.weaver.Constants;
 
 public interface ClassFileInclusionScanner {
 
-    static final String DEFAULT_INCLUSION_PATTERN = "**/*.class";
-    static final String DEFAULT_EXCLUSION_PATTERN = "**/*" + Constants.LOCATION_CACHE_SUFFIX + ".class";
+    String DEFAULT_INCLUSION_PATTERN = "**/*.class";
+    String DEFAULT_EXCLUSION_PATTERN = "**/*" + Constants.LOCATION_CACHE_SUFFIX + ".class";
 
     /**
      * Finds class files matching a specific condition.
@@ -34,4 +34,5 @@ public interface ClassFileInclusionScanner {
      * @return a set of relative paths to file in {@code sourceDir}
      */
     Set<Path> getIncludedClassFiles(Path sourceDir, Path targetDir);
+
 }
diff --git a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/SimpleInclusionScanner.java b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/SimpleInclusionScanner.java
index bbaa7d3..0b86bc6 100644
--- a/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/SimpleInclusionScanner.java
+++ b/log4j-transform-maven-plugin/src/main/java/org/apache/logging/log4j/transform/maven/scan/SimpleInclusionScanner.java
@@ -90,4 +90,5 @@ public class SimpleInclusionScanner implements ClassFileInclusionScanner {
         }
         return false;
     }
+
 }
diff --git a/log4j-transform-maven-shade-plugin-extensions/pom.xml b/log4j-transform-maven-shade-plugin-extensions/pom.xml
index 3a389f8..7252496 100644
--- a/log4j-transform-maven-shade-plugin-extensions/pom.xml
+++ b/log4j-transform-maven-shade-plugin-extensions/pom.xml
@@ -16,31 +16,34 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-transform-parent</artifactId>
     <version>${revision}</version>
     <relativePath>../log4j-transform-parent</relativePath>
   </parent>
+
   <artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
   <packaging>jar</packaging>
+
   <name>Apache Log4j Maven Shade Plugin Transformer</name>
   <description>Transformer implementation to concatenate Log4j2Plugins.dat files</description>
-  <properties>
-    <docLabel>Shaded Plugin Log4j2 Transformer</docLabel>
-    <maven.doap.skip>true</maven.doap.skip>
-  </properties>
 
   <dependencies>
+
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
@@ -52,12 +55,15 @@
       <version>3.4.1</version>
       <scope>provided</scope>
     </dependency>
+
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
+
   </dependencies>
+
   <build>
     <plugins>
       <plugin>
@@ -105,4 +111,5 @@
       </plugin>
     </plugins>
   </build>
+
 </project>
diff --git a/log4j-transform-parent/pom.xml b/log4j-transform-parent/pom.xml
index 764cba2..1e4c3ed 100644
--- a/log4j-transform-parent/pom.xml
+++ b/log4j-transform-parent/pom.xml
@@ -16,24 +16,20 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-transform-bom</artifactId>
     <version>${revision}</version>
   </parent>
+
   <artifactId>log4j-transform-parent</artifactId>
   <packaging>pom</packaging>
+
   <properties>
-    <!-- project properties -->
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
-    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-    <!-- `project.build.outputTimestamp` is required for reproducible builds: https://maven.apache.org/guides/mini/guide-reproducible-builds.html -->
-    <project.build.outputTimestamp>1683307797</project.build.outputTimestamp>
-    <!-- disable `maven-site-plugin`-->
-    <maven.site.skip>true</maven.site.skip>
-    <maven.site.deploy.skip>true</maven.site.deploy.skip>
+
     <!-- dependency versions -->
     <asm.version>9.5</asm.version>
     <assertj.version>3.24.2</assertj.version>
@@ -48,17 +44,18 @@
     <plexus-utils.version>3.5.1</plexus-utils.version>
     <slf4j.version>2.0.9</slf4j.version>
     <spotbugs.version>4.7.3</spotbugs.version>
+
     <!-- plugin versions -->
     <bundle-plugin.version>5.1.8</bundle-plugin.version>
-    <error-prone.version>2.21.1</error-prone.version>
     <jacoco-maven-plugin.version>0.8.10</jacoco-maven-plugin.version>
-    <findsecbugs-plugin.version>1.12.0</findsecbugs-plugin.version>
     <maven-invoker-plugin.version>3.5.1</maven-invoker-plugin.version>
-    <spotbugs-maven-plugin.version>4.7.3.5</spotbugs-maven-plugin.version>
     <surefire.version>3.0.0-M7</surefire.version>
+
   </properties>
+
   <dependencyManagement>
     <dependencies>
+
       <dependency>
         <groupId>org.ow2.asm</groupId>
         <artifactId>asm-bom</artifactId>
@@ -66,6 +63,7 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+
       <dependency>
         <groupId>org.junit</groupId>
         <artifactId>junit-bom</artifactId>
@@ -73,6 +71,7 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-bom</artifactId>
@@ -80,197 +79,102 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+
       <dependency>
         <groupId>org.assertj</groupId>
         <artifactId>assertj-core</artifactId>
         <version>${assertj.version}</version>
       </dependency>
+
       <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>${commons-io.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
         <version>${commons-lang.version}</version>
       </dependency>
+
       <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
         <version>${commons-logging.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.freemarker</groupId>
         <artifactId>freemarker</artifactId>
         <version>${freemarker.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.openjdk.jmh</groupId>
         <artifactId>jmh-core</artifactId>
         <version>${jmh.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.apache.maven</groupId>
         <artifactId>maven-core</artifactId>
         <version>${maven.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.apache.maven</groupId>
         <artifactId>maven-plugin-api</artifactId>
         <version>${maven.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-utils</artifactId>
         <version>${plexus-utils.version}</version>
       </dependency>
+
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${slf4j.version}</version>
       </dependency>
+
       <dependency>
         <groupId>com.github.spotbugs</groupId>
         <artifactId>spotbugs-annotations</artifactId>
         <version>${spotbugs.version}</version>
       </dependency>
+
     </dependencies>
   </dependencyManagement>
+
   <build>
     <pluginManagement>
       <plugins>
+
         <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
           <version>${jacoco-maven-plugin.version}</version>
         </plugin>
+
         <plugin>
           <groupId>org.apache.felix</groupId>
           <artifactId>maven-bundle-plugin</artifactId>
           <version>${bundle-plugin.version}</version>
         </plugin>
+
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-invoker-plugin</artifactId>
           <version>${maven-invoker-plugin.version}</version>
         </plugin>
-        <plugin>
-          <groupId>com.github.spotbugs</groupId>
-          <artifactId>spotbugs-maven-plugin</artifactId>
-          <version>${spotbugs-maven-plugin.version}</version>
-        </plugin>
+
       </plugins>
     </pluginManagement>
-    <plugins>
-      <!-- Apache RAT (Release Audit Tool) check to verify licenses.
-           `apache-rat-plugin`: https://creadur.apache.org/rat/apache-rat-plugin/
-           Release Audit Tool: https://creadur.apache.org/rat/index.html -->
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <configuration>
-          <consoleOutput>true</consoleOutput>
-          <excludes>
-            <exclude>**/target/**</exclude>
-            <exclude>.java-version</exclude>
-            <exclude>src/main/resources/META-INF/MANIFEST.MF</exclude>
-          </excludes>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>check</goal>
-            </goals>
-            <phase>verify</phase>
-          </execution>
-        </executions>
-      </plugin>
-      <!-- Resolves `revision` property prior to deployment.
-           Skipping this step would result in artifacts not consumable by Maven.
-           https://maven.apache.org/maven-ci-friendly.html#install-deploy -->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>flatten-maven-plugin</artifactId>
-        <version>${flatten-maven-plugin.version}</version>
-        <configuration>
-          <updatePomFile>true</updatePomFile>
-          <flattenMode>resolveCiFriendliesOnly</flattenMode>
-        </configuration>
-        <executions>
-          <execution>
-            <id>flatten-revision</id>
-            <goals>
-              <goal>flatten</goal>
-            </goals>
-            <phase>process-resources</phase>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <release>${java.version}</release>
-          <encoding>${project.build.sourceEncoding}</encoding>
-          <compilerArgs>
-            <arg>-Xlint:all</arg>
-            <arg>-XDcompilePolicy=simple</arg>
-            <arg>-Xplugin:ErrorProne</arg>
-          </compilerArgs>
-          <annotationProcessorPaths>
-            <path>
-              <groupId>com.google.errorprone</groupId>
-              <artifactId>error_prone_core</artifactId>
-              <version>${error-prone.version}</version>
-            </path>
-          </annotationProcessorPaths>
-        </configuration>
-      </plugin>
-      <!-- Ensure that version for each dependency resolved during a build, is equal to or higher than all transitive dependency declarations.
-           A failure here requires adding the dependency to the dependency management. -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>enforce-upper-bound-deps</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireUpperBoundDeps />
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <!-- Configuration here must match the one in `.editorconfig`! -->
-      <plugin>
-        <groupId>com.github.spotbugs</groupId>
-        <artifactId>spotbugs-maven-plugin</artifactId>
-        <configuration>
-          <plugins>
-            <plugin>
-              <groupId>com.h3xstream.findsecbugs</groupId>
-              <artifactId>findsecbugs-plugin</artifactId>
-              <version>${findsecbugs-plugin.version}</version>
-            </plugin>
-          </plugins>
-        </configuration>
-        <executions>
-          <execution>
-            <id>default-spotbugs</id>
-            <goals>
-              <goal>check</goal>
-            </goals>
-            <phase>verify</phase>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
   </build>
+
   <profiles>
     <profile>
       <id>java8-tests</id>
@@ -292,4 +196,5 @@
       </build>
     </profile>
   </profiles>
+
 </project>
diff --git a/log4j-transform-perf/pom.xml b/log4j-transform-perf/pom.xml
index 8119b2f..ea9017d 100644
--- a/log4j-transform-perf/pom.xml
+++ b/log4j-transform-perf/pom.xml
@@ -16,42 +16,55 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-transform-parent</artifactId>
     <version>${revision}</version>
     <relativePath>../log4j-transform-parent</relativePath>
   </parent>
+
   <artifactId>log4j-transform-perf</artifactId>
+
   <name>Log4j Transformation Tools Performance test</name>
   <description>Performance tests for Apache Log4j Transformation Tools</description>
+
   <properties>
     <maven.install.skip>true</maven.install.skip>
     <maven.deploy.skip>true</maven.deploy.skip>
     <spotbugs.skip>true</spotbugs.skip>
   </properties>
+
   <dependencies>
+
     <dependency>
       <groupId>org.openjdk.jmh</groupId>
       <artifactId>jmh-core</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
     </dependency>
+
     <dependency>
       <groupId>com.github.spotbugs</groupId>
       <artifactId>spotbugs-annotations</artifactId>
       <scope>provided</scope>
     </dependency>
+
   </dependencies>
+
   <build>
     <plugins>
+
       <plugin>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-transform-maven-plugin</artifactId>
@@ -68,6 +81,7 @@
           </execution>
         </executions>
       </plugin>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
@@ -91,6 +105,7 @@
           </execution>
         </executions>
       </plugin>
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
@@ -142,6 +157,8 @@
           </execution>
         </executions>
       </plugin>
+
     </plugins>
   </build>
+
 </project>
diff --git a/log4j-weaver/pom.xml b/log4j-weaver/pom.xml
index 9fbe6c3..cf5052a 100644
--- a/log4j-weaver/pom.xml
+++ b/log4j-weaver/pom.xml
@@ -16,74 +16,93 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-transform-parent</artifactId>
     <version>${revision}</version>
     <relativePath>../log4j-transform-parent</relativePath>
   </parent>
+
   <artifactId>log4j-weaver</artifactId>
+
   <name>Apache Log4j Weaving Tools</name>
   <description>The Apache Log4j Weaving Tools for logging frameworks</description>
+
   <dependencies>
+
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm-commons</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm-util</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
+
     <dependency>
       <groupId>com.github.spotbugs</groupId>
       <artifactId>spotbugs-annotations</artifactId>
       <scope>provided</scope>
     </dependency>
+
     <dependency>
       <groupId>org.assertj</groupId>
       <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api-test</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core-test</artifactId>
       <scope>test</scope>
     </dependency>
+
   </dependencies>
+
   <build>
     <plugins>
       <plugin>
@@ -92,4 +111,5 @@
       </plugin>
     </plugins>
   </build>
+
 </project>
diff --git a/mvnw b/mvnw
index c96ef80..af46563 100755
--- a/mvnw
+++ b/mvnw
@@ -19,7 +19,7 @@
 # ----------------------------------------------------------------------------
 
 # ----------------------------------------------------------------------------
-# Apache Maven Wrapper startup batch script, version 3.1.1
+# Apache Maven Wrapper startup batch script, version 3.2.0
 #
 # Required ENV vars:
 # ------------------
@@ -53,7 +53,7 @@ fi
 cygwin=false;
 darwin=false;
 mingw=false
-case "`uname`" in
+case "$(uname)" in
   CYGWIN*) cygwin=true ;;
   MINGW*) mingw=true;;
   Darwin*) darwin=true
@@ -61,7 +61,7 @@ case "`uname`" in
     # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
     if [ -z "$JAVA_HOME" ]; then
       if [ -x "/usr/libexec/java_home" ]; then
-        JAVA_HOME="`/usr/libexec/java_home`"; export JAVA_HOME
+        JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
       else
         JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
       fi
@@ -71,38 +71,38 @@ esac
 
 if [ -z "$JAVA_HOME" ] ; then
   if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
+    JAVA_HOME=$(java-config --jre-home)
   fi
 fi
 
 # For Cygwin, ensure paths are in UNIX format before anything is touched
 if $cygwin ; then
   [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+    JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
   [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+    CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
 fi
 
 # For Mingw, ensure paths are in UNIX format before anything is touched
 if $mingw ; then
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
 fi
 
 if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+  javaExecutable="$(which javac)"
+  if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
     # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+    readLink=$(which readlink)
+    if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
       if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+        javaHome="$(dirname "\"$javaExecutable\"")"
+        javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
       else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
+        javaExecutable="$(readlink -f "\"$javaExecutable\"")"
       fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      javaHome="$(dirname "\"$javaExecutable\"")"
+      javaHome=$(expr "$javaHome" : '\(.*\)/bin')
       JAVA_HOME="$javaHome"
       export JAVA_HOME
     fi
@@ -118,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then
       JAVACMD="$JAVA_HOME/bin/java"
     fi
   else
-    JAVACMD="`\\unset -f command; \\command -v java`"
+    JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
   fi
 fi
 
@@ -150,108 +150,99 @@ find_maven_basedir() {
     fi
     # workaround for JBEAP-8937 (on Solaris 10/Sparc)
     if [ -d "${wdir}" ]; then
-      wdir=`cd "$wdir/.."; pwd`
+      wdir=$(cd "$wdir/.." || exit 1; pwd)
     fi
     # end of workaround
   done
-  printf '%s' "$(cd "$basedir"; pwd)"
+  printf '%s' "$(cd "$basedir" || exit 1; pwd)"
 }
 
 # concatenates all lines of a file
 concat_lines() {
   if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
+    # Remove \r in case we run on Windows within Git Bash
+    # and check out the repository with auto CRLF management
+    # enabled. Otherwise, we may read lines that are delimited with
+    # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+    # splitting rules.
+    tr -s '\r\n' ' ' < "$1"
+  fi
+}
+
+log() {
+  if [ "$MVNW_VERBOSE" = true ]; then
+    printf '%s\n' "$1"
   fi
 }
 
-BASE_DIR=$(find_maven_basedir "$(dirname $0)")
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
 if [ -z "$BASE_DIR" ]; then
   exit 1;
 fi
 
 MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
-if [ "$MVNW_VERBOSE" = true ]; then
-  echo $MAVEN_PROJECTBASEDIR
-fi
+log "$MAVEN_PROJECTBASEDIR"
 
 ##########################################################################################
 # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
 # This allows using the maven wrapper in projects that prohibit checking in binary data.
 ##########################################################################################
-if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Found .mvn/wrapper/maven-wrapper.jar"
-    fi
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+    log "Found $wrapperJarPath"
 else
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
-    fi
+    log "Couldn't find $wrapperJarPath, downloading it ..."
+
     if [ -n "$MVNW_REPOURL" ]; then
-      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
+      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
     else
-      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
+      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
     fi
-    while IFS="=" read key value; do
-      case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;;
+    while IFS="=" read -r key value; do
+      # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+      safeValue=$(echo "$value" | tr -d '\r')
+      case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
       esac
-    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
-    if [ "$MVNW_VERBOSE" = true ]; then
-      echo "Downloading from: $wrapperUrl"
-    fi
-    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+    log "Downloading from: $wrapperUrl"
+
     if $cygwin; then
-      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+      wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
     fi
 
     if command -v wget > /dev/null; then
-        QUIET="--quiet"
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Found wget ... using wget"
-          QUIET=""
-        fi
+        log "Found wget ... using wget"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
         if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
-            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath"
+            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
         else
-            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath"
+            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
         fi
-        [ $? -eq 0 ] || rm -f "$wrapperJarPath"
     elif command -v curl > /dev/null; then
-        QUIET="--silent"
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Found curl ... using curl"
-          QUIET=""
-        fi
+        log "Found curl ... using curl"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
         if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
-            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L
+            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
         else
-            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L
+            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
         fi
-        [ $? -eq 0 ] || rm -f "$wrapperJarPath"
     else
-        if [ "$MVNW_VERBOSE" = true ]; then
-          echo "Falling back to using Java to download"
-        fi
-        javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
-        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class"
+        log "Falling back to using Java to download"
+        javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
         # For Cygwin, switch paths to Windows format before running javac
         if $cygwin; then
-          javaSource=`cygpath --path --windows "$javaSource"`
-          javaClass=`cygpath --path --windows "$javaClass"`
+          javaSource=$(cygpath --path --windows "$javaSource")
+          javaClass=$(cygpath --path --windows "$javaClass")
         fi
         if [ -e "$javaSource" ]; then
             if [ ! -e "$javaClass" ]; then
-                if [ "$MVNW_VERBOSE" = true ]; then
-                  echo " - Compiling MavenWrapperDownloader.java ..."
-                fi
-                # Compiling the Java class
+                log " - Compiling MavenWrapperDownloader.java ..."
                 ("$JAVA_HOME/bin/javac" "$javaSource")
             fi
             if [ -e "$javaClass" ]; then
-                # Running the downloader
-                if [ "$MVNW_VERBOSE" = true ]; then
-                  echo " - Running MavenWrapperDownloader.java ..."
-                fi
-                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+                log " - Running MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
             fi
         fi
     fi
@@ -260,28 +251,57 @@ fi
 # End of extension
 ##########################################################################################
 
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+  esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+  wrapperSha256Result=false
+  if command -v sha256sum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  elif command -v shasum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+    echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+    exit 1
+  fi
+  if [ $wrapperSha256Result = false ]; then
+    echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+    echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+    echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+    exit 1
+  fi
+fi
+
 MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
 
 # For Cygwin, switch paths to Windows format before running java
 if $cygwin; then
   [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+    JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
   [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+    CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
   [ -n "$MAVEN_PROJECTBASEDIR" ] &&
-    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+    MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
 fi
 
 # Provide a "standardized" way to retrieve the CLI args that will
 # work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
 export MAVEN_CMD_LINE_ARGS
 
 WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
 LINE_SEPARATOR="
 "
 
+# shellcheck disable=SC2086 # safe args
 exec "$JAVACMD" \
   $MAVEN_OPTS \
   $MAVEN_DEBUG_OPTS \
diff --git a/mvnw.cmd b/mvnw.cmd
index 58f5237..3cb089f 100644
--- a/mvnw.cmd
+++ b/mvnw.cmd
@@ -18,7 +18,7 @@
 @REM ----------------------------------------------------------------------------
 
 @REM ----------------------------------------------------------------------------
-@REM Apache Maven Wrapper startup batch script, version 3.1.1
+@REM Apache Maven Wrapper startup batch script, version 3.2.0
 @REM
 @REM Required ENV vars:
 @REM JAVA_HOME - location of a JDK home dir
@@ -119,7 +119,7 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
 set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
 set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
 
-set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
 
 FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
     IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
@@ -133,7 +133,7 @@ if exist %WRAPPER_JAR% (
     )
 ) else (
     if not "%MVNW_REPOURL%" == "" (
-        SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
+        SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
     )
     if "%MVNW_VERBOSE%" == "true" (
         echo Couldn't find %WRAPPER_JAR%, downloading it ...
@@ -153,6 +153,24 @@ if exist %WRAPPER_JAR% (
 )
 @REM End of extension
 
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+    powershell -Command "&{"^
+       "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+       "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+       "  Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+       "  Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+       "  Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+       "  exit 1;"^
+       "}"^
+       "}"
+    if ERRORLEVEL 1 goto error
+)
+
 @REM Provide a "standardized" way to retrieve the CLI args that will
 @REM work with both Windows and non-Windows executions.
 set MAVEN_CMD_LINE_ARGS=%*
diff --git a/pom.xml b/pom.xml
index 63f7747..d1757fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
   <!-- ██     ██  █████  ██████  ███    ██ ██ ███    ██  ██████  ██
        ██     ██ ██   ██ ██   ██ ████   ██ ██ ████   ██ ██       ██
        ██  █  ██ ███████ ██████  ██ ██  ██ ██ ██ ██  ██ ██   ███ ██
@@ -24,31 +25,26 @@
 
        `log4j-transform` project modules should use `log4j-transform-parent` as their parents, not this POM!
        This POM constitutes the BOM to be imported by applications using `log4j-transform` project modules. -->
+
   <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.logging</groupId>
     <artifactId>logging-parent</artifactId>
-    <version>9</version>
+    <version>10.0.0-SNAPSHOT</version>
   </parent>
+
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-transform-bom</artifactId>
   <version>${revision}</version>
   <packaging>pom</packaging>
+
   <url>https://github.com/apache/logging-log4j-transform</url>
+
   <inceptionYear>2022</inceptionYear>
-  <organization>
-    <name>Apache Software Foundation</name>
-    <url>https://apache.org</url>
-  </organization>
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-      <comments>A business-friendly OSS license</comments>
-    </license>
-  </licenses>
+
   <developers>
+
     <developer>
       <id>pkarwasz</id>
       <name>Piotr P. Karwasz</name>
@@ -58,112 +54,101 @@
       </roles>
       <timezone>Europe/Warsaw</timezone>
     </developer>
+
+    <developer>
+      <id>vy</id>
+      <name>Volkan Yazıcı</name>
+      <email>vy@apache.org</email>
+      <roles>
+        <role>PMC Member</role>
+      </roles>
+      <timezone>Europe/Amsterdam</timezone>
+    </developer>
+
   </developers>
+
   <modules>
+
     <!-- the parent POM must come first: -->
     <module>log4j-transform-parent</module>
+
+    <!-- Modules here must have a corresponding entry in `dependencyManagement > dependencies` block below! -->
     <module>log4j-transform-maven-plugin</module>
-    <module>log4j-weaver</module>
     <module>log4j-transform-maven-shade-plugin-extensions</module>
+    <module>log4j-weaver</module>
+
   </modules>
+
   <scm>
     <connection>scm:git:git@github.com:apache/logging-log4j-transform.git</connection>
     <developerConnection>scm:git:git@github.com:apache/logging-log4j-transform.git</developerConnection>
     <tag>HEAD</tag>
     <url>https://github.com/apache/logging-log4j-transform</url>
   </scm>
+
   <issueManagement>
     <system>GitHub Issues</system>
     <url>https://github.com/apache/logging-log4j-transform/issues</url>
   </issueManagement>
+
   <ciManagement>
     <system>GitHub Actions</system>
     <url>https://github.com/apache/logging-log4j-transform/actions</url>
   </ciManagement>
-  <distributionManagement>
-    <!-- `repository` from parent `org.apache.logging:logging-parent` (id: `apache.releases.https`) -->
-    <!-- `snapshotRepository` from parent `org.apache.logging:logging-parent` (id: `apache.snapshots.https`) -->
-  </distributionManagement>
+
   <properties>
+
     <!-- project version -->
-    <revision>0.1.1-SNAPSHOT</revision>
-    <!-- `minimalJavaBuildVersion` is employed by `org.apache:apache`,
-      which is the parent of `org.apache.logging:logging-parent`, which is the parent of us.
-        `minimalJavaBuildVersion` is used for enforcing the compiler version.
-        We will use `java.version` to enforce the target JVM byte code, which is
-        8. -->
-    <minimalJavaBuildVersion>[17,18)</minimalJavaBuildVersion>
-    <java.version>8</java.version>
-    <!-- `project.build.outputTimestamp` is required for reproducible builds: https://maven.apache.org/guides/mini/guide-reproducible-builds.html -->
-    <project.build.outputTimestamp>1683307797</project.build.outputTimestamp>
-    <!-- plugin versions -->
-    <checksum-maven-plugin.version>1.11</checksum-maven-plugin.version>
-    <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
-    <log4j-changelog-maven-plugin.version>0.3.0</log4j-changelog-maven-plugin.version>
-    <sign-maven-plugin.version>1.0.1</sign-maven-plugin.version>
+    <revision>0.2.0-SNAPSHOT</revision>
+
+    <!-- disable `maven-site-plugin`-->
+    <maven.site.skip>true</maven.site.skip>
+    <maven.site.deploy.skip>true</maven.site.deploy.skip>
+
   </properties>
+
   <dependencyManagement>
     <dependencies>
+
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-transform-maven-plugin</artifactId>
         <version>${project.version}</version>
       </dependency>
+
+      <dependency>
+        <groupId>org.apache.logging.log4j</groupId>
+        <artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-weaver</artifactId>
         <version>${project.version}</version>
       </dependency>
+
     </dependencies>
   </dependencyManagement>
+
+  <!-- `repositories` is only needed for testing unreleased `logging-parent` functionality!
+       This block should not go into any release or whatsoever! -->
+  <repositories>
+    <repository>
+      <id>apache.snapshots.https</id>
+      <name>${distMgmtSnapshotsName}</name>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+    </repository>
+  </repositories>
+
   <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>flatten-maven-plugin</artifactId>
-          <version>${flatten-maven-plugin.version}</version>
-          <configuration>
-            <!-- Setting `outputDirectory` to `project.build.directory`, which is cleaned by `default-clean` execution of `clean:clean`.
-                 This makes `flatten:clean` redundant. -->
-            <outputDirectory>${project.build.directory}</outputDirectory>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.logging.log4j</groupId>
-          <artifactId>log4j-changelog-maven-plugin</artifactId>
-          <version>${log4j-changelog-maven-plugin.version}</version>
-          <configuration>
-            <indexTemplates />
-            <changelogTemplates>
-              <template>
-                <source>${project.basedir}/src/changelog/CHANGELOG.adoc.ftl</source>
-                <target>${project.basedir}/CHANGELOG.adoc</target>
-                <failIfNotFound>true</failIfNotFound>
-              </template>
-            </changelogTemplates>
-          </configuration>
-        </plugin>
-        <!-- Downgrade until https://issues.apache.org/jira/browse/MRELEASE-1091 is reverted -->
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>3.0.0</version>
-          <configuration>
-            <autoVersionSubmodules>true</autoVersionSubmodules>
-            <preparationGoals>clean spotless:apply verify</preparationGoals>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
     <plugins>
-      <!-- BOMs should ideally _only_ contain dependencies for modules of the project.
-           No invasive properties or plugin/dependency management – either from the BOM itself or its parent.
-           The following `flatten-maven-plugin` exactly performs that trimming operation. -->
+
+      <!-- Enable BOM flattening -->
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>flatten-maven-plugin</artifactId>
-        <inherited>false</inherited>
+        <version>${flatten-maven-plugin.version}</version>
         <executions>
           <execution>
             <id>flatten-bom</id>
@@ -171,130 +156,27 @@
               <goal>flatten</goal>
             </goals>
             <phase>process-resources</phase>
+            <inherited>false</inherited>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- `logging-parent` is not released yet, hence we still need to use its SNAPSHOT.
+           Temporarily disable `enforce-no-snapshots` inherited from `logging-parent`. -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>enforce-no-snapshots</id>
             <configuration>
-              <flattenMode>bom</flattenMode>
-              <!-- POM `ElementHandling` is pretty cryptic: https://www.mojohaus.org/flatten-maven-plugin/apidocs/org/codehaus/mojo/flatten/ElementHandling.html
-                   Trial-and-error has shown that we should use either `remove` or `interpolate`.
-                   `remove` simply removes the element.
-                   `interpolate` takes the element from the original POM with variables interpolated.
-                   Avoid using `resolve`, which uses the effective POM where inherited changes from the parent are also incorporated. -->
-              <pomElements>
-                <properties>remove</properties>
-                <repositories>remove</repositories>
-                <distributionManagement>remove</distributionManagement>
-                <dependencyManagement>interpolate</dependencyManagement>
-              </pomElements>
+              <skip>true</skip>
             </configuration>
           </execution>
         </executions>
       </plugin>
+
     </plugins>
   </build>
-  <profiles>
-    <profile>
-      <id>release</id>
-      <properties>
-        <skipTests>true</skipTests>
-      </properties>
-      <build>
-        <defaultGoal>deploy</defaultGoal>
-        <plugins>
-
-          <!-- Create a source-release artifact that contains the fully buildable
-               project directory source structure. This is the artifact which is
-               the official subject of any release vote. -->
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>source-release-assembly</id>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <phase>package</phase>
-                <configuration>
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-                  <finalName>apache-log4j-transform-${project.version}</finalName>
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-                  <descriptors>
-                    <descriptor>src/assembly/source-release.xml</descriptor>
-                  </descriptors>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-
-          <plugin>
-            <groupId>net.nicoulaj.maven.plugins</groupId>
-            <artifactId>checksum-maven-plugin</artifactId>
-            <version>1.11</version>
-            <inherited>false</inherited>
-            <executions>
-              <execution>
-                <id>source-release-checksum</id>
-                <goals>
-                  <goal>files</goal>
-                </goals>
-                <!-- execute prior to maven-gpg-plugin:sign due to https://github.com/nicoulaj/checksum-maven-plugin/issues/112 -->
-                <phase>post-integration-test</phase>
-                <configuration>
-                  <algorithms>
-                    <algorithm>SHA-512</algorithm>
-                  </algorithms>
-                  <csvSummary>false</csvSummary>
-                  <fileSets>
-                    <fileSet>
-                      <directory>${project.build.directory}</directory>
-                      <includes>
-                        <include>apache-log4j-transform*</include>
-                      </includes>
-                    </fileSet>
-                  </fileSets>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-
-          <plugin>
-            <groupId>org.simplify4u.plugins</groupId>
-            <artifactId>sign-maven-plugin</artifactId>
-            <version>${sign-maven-plugin.version}</version>
-            <executions>
-              <execution>
-                <id>default-sign</id>
-                <goals>
-                  <goal>sign</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-
-          <!-- We want to deploy the artifact to a staging location for perusal -->
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-deploy-plugin</artifactId>
-            <inherited>true</inherited>
-            <configuration>
-              <updateReleaseInfo>true</updateReleaseInfo>
-            </configuration>
-          </plugin>
-
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+
 </project>
diff --git a/spotless-license-header.txt b/spotless-license-header.txt
new file mode 100644
index 0000000..4f33236
--- /dev/null
+++ b/spotless-license-header.txt
@@ -0,0 +1,16 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
diff --git a/src/assembly/source-release.xml b/src/assembly/source-release.xml
deleted file mode 100644
index 824c79a..0000000
--- a/src/assembly/source-release.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to you under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<assembly>
-  <id>src</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <fileSets>
-    <fileSet>
-      <useDefaultExcludes>true</useDefaultExcludes>
-      <directory>${project.basedir}</directory>
-      <excludes>
-        <!-- Keep in sync with .gitignore -->
-        <exclude>**/target/**</exclude>
-        <exclude>.idea/**</exclude>
-        <exclude>**/*.iml</exclude>
-        <exclude>**/*.iws</exclude>
-        <exclude>**/.classpath</exclude>
-        <exclude>**/.project</exclude>
-        <exclude>**/.settings/**</exclude>
-        <exclude>.mvn/wrapper/maven-wrapper.jar</exclude>
-        <!-- Remove ASF, Git and Github specific stuff -->
-        <exclude>.asf.yaml</exclude>
-        <exclude>.git/**</exclude>
-        <exclude>.github/**</exclude>
-        <exclude>.gitattributes</exclude>
-        <exclude>.gitignore</exclude>
-      </excludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/src/changelog/0.1.0/.release.xml b/src/changelog/.changelog.md.ftl
similarity index 64%
copy from src/changelog/0.1.0/.release.xml
copy to src/changelog/.changelog.md.ftl
index 42b5807..7a5b094 100644
--- a/src/changelog/0.1.0/.release.xml
+++ b/src/changelog/.changelog.md.ftl
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<#--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
   ~ this work for additional information regarding copyright ownership.
@@ -15,7 +14,13 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<release xmlns="http://logging.apache.org/log4j/changelog"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.0.xsd"
-         date="2023-05-05" version="0.1.0"/>
+<#if entriesByType?size gt 0>## Changes
+<#list entriesByType as entryType, entries>
+
+### ${entryType?capitalize}
+
+<#list entries as entry>
+* ${entry.description.text?replace("\\s+", " ", "r")}<#if entry.issues?has_content> (<#list entry.issues as issue><#if issue.link?starts_with("https://github.com/apache/logging-parent")>#${issue.id}<#else>[${issue.id}](${issue.link})</#if><#if issue?has_next>, </#if></#list>)</#if>
+</#list>
+</#list>
+</#if>
diff --git a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml b/src/changelog/.index.md.ftl
similarity index 71%
copy from src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
copy to src/changelog/.index.md.ftl
index 34e1f8a..693f1f8 100644
--- a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
+++ b/src/changelog/.index.md.ftl
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<#--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
   ~ this work for additional information regarding copyright ownership.
@@ -15,10 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<entry type="added">
-  <issue id="LOG4J2-3638" link="https://issues.apache.org/jira/browse/LOG4J2-3638"/>
-  <author id="pkarwasz"/>
-  <description format="asciidoc">
-    Add bytecode transformation tool to provide location information without reflection.
-  </description>
-</entry>
+
+# Release Notes
+
+<#list releases as release>
+* [${release.version}](${release.version}.md)<#if release.date?has_content> (${release.date})</#if>
+</#list>
diff --git a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml b/src/changelog/0.1.0/.release-notes.md.ftl
similarity index 71%
copy from src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
copy to src/changelog/0.1.0/.release-notes.md.ftl
index 34e1f8a..89bb2c3 100644
--- a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
+++ b/src/changelog/0.1.0/.release-notes.md.ftl
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<#--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
   ~ this work for additional information regarding copyright ownership.
@@ -15,10 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<entry type="added">
-  <issue id="LOG4J2-3638" link="https://issues.apache.org/jira/browse/LOG4J2-3638"/>
-  <author id="pkarwasz"/>
-  <description format="asciidoc">
-    Add bytecode transformation tool to provide location information without reflection.
-  </description>
-</entry>
+
+# ${release.version}<#if release.date?has_content> (${release.date})</#if>
+
+This is the first release of the project.
+
+<#include "../.changelog.md.ftl">
diff --git a/src/changelog/0.1.0/.release.xml b/src/changelog/0.1.0/.release.xml
index 42b5807..f51cb70 100644
--- a/src/changelog/0.1.0/.release.xml
+++ b/src/changelog/0.1.0/.release.xml
@@ -17,5 +17,5 @@
   -->
 <release xmlns="http://logging.apache.org/log4j/changelog"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.0.xsd"
+         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.1.xsd"
          date="2023-05-05" version="0.1.0"/>
diff --git a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml b/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
index 34e1f8a..14ada66 100644
--- a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
+++ b/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
@@ -15,10 +15,11 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<entry type="added">
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns="http://logging.apache.org/log4j/changelog"
+       xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.1.xsd"
+       type="added">
   <issue id="LOG4J2-3638" link="https://issues.apache.org/jira/browse/LOG4J2-3638"/>
-  <author id="pkarwasz"/>
-  <description format="asciidoc">
-    Add bytecode transformation tool to provide location information without reflection.
-  </description>
+  <author id="github:ppkarwasz"/>
+  <description format="markdown">Added `log4j-transform-maven-plugin` bytecode transformation tool to provide location information without reflection</description>
 </entry>
diff --git a/src/changelog/0.1.0/LOG4J2-673_Maven_Shade_resource_transformer.xml b/src/changelog/0.1.0/LOG4J2-673_Maven_Shade_resource_transformer.xml
index aa19505..5cde8f4 100644
--- a/src/changelog/0.1.0/LOG4J2-673_Maven_Shade_resource_transformer.xml
+++ b/src/changelog/0.1.0/LOG4J2-673_Maven_Shade_resource_transformer.xml
@@ -15,12 +15,12 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<entry type="added">
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns="http://logging.apache.org/log4j/changelog"
+       xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.1.xsd"
+       type="added">
   <issue id="LOG4J2-673" link="https://issues.apache.org/jira/browse/LOG4J2-673"/>
-  <author id="edwgiz" name="Eduard Gizatullin"/>
-  <!-- Committer -->
-  <author id="pkarwasz"/>
-  <description format="asciidoc">
-    Add resource transformer for the Maven Shade Plugin to merge `Log4j2Plugins.dat` plugin caches.
-  </description>
+  <author id="github:edwgiz" name="Eduard Gizatullin"/>
+  <author id="github:ppkarwasz"/>
+  <description format="markdown">Added `log4j-transform-maven-shade-plugin-extensions` resource transformer for the Maven Shade Plugin to merge `Log4j2Plugins.dat` plugin caches</description>
 </entry>
diff --git a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml b/src/changelog/0.2.0/.release-notes.md.ftl
similarity index 69%
copy from src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
copy to src/changelog/0.2.0/.release-notes.md.ftl
index 34e1f8a..62bcbfa 100644
--- a/src/changelog/0.1.0/LOG4J2-3638_Provide_Maven_plugin_to_inline_location.xml
+++ b/src/changelog/0.2.0/.release-notes.md.ftl
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<#--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
   ~ this work for additional information regarding copyright ownership.
@@ -15,10 +14,10 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<entry type="added">
-  <issue id="LOG4J2-3638" link="https://issues.apache.org/jira/browse/LOG4J2-3638"/>
-  <author id="pkarwasz"/>
-  <description format="asciidoc">
-    Add bytecode transformation tool to provide location information without reflection.
-  </description>
-</entry>
+
+# ${release.version}<#if release.date?has_content> (${release.date})</#if>
+
+This release doesn't contain any functional changes.
+Though the release process itself is new and noteworthy: it is performed using a shared GitHub Actions workflow stored in [`logging-parent`](https://github.com/apache/logging-parent/).
+
+<#include "../.changelog.md.ftl">
diff --git a/src/changelog/0.1.0/.release.xml b/src/changelog/0.2.0/.release.xml
similarity index 90%
copy from src/changelog/0.1.0/.release.xml
copy to src/changelog/0.2.0/.release.xml
index 42b5807..c3009d5 100644
--- a/src/changelog/0.1.0/.release.xml
+++ b/src/changelog/0.2.0/.release.xml
@@ -17,5 +17,5 @@
   -->
 <release xmlns="http://logging.apache.org/log4j/changelog"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.0.xsd"
-         date="2023-05-05" version="0.1.0"/>
+         xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.1.xsd"
+         date="2023-09-11" version="0.2.0"/>
diff --git a/src/changelog/CHANGELOG.adoc.ftl b/src/changelog/CHANGELOG.adoc.ftl
deleted file mode 100644
index de4a9a0..0000000
--- a/src/changelog/CHANGELOG.adoc.ftl
+++ /dev/null
@@ -1,84 +0,0 @@
-<#--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<#function isCommitter apacheId>
-  <#switch apacheId>
-    <#case "ckozak">
-    <#case "ggregory">
-    <#case "grobmeier">
-    <#case "mattsicker">
-    <#case "pkarwasz">
-    <#case "rgoers">
-    <#case "rpopma">
-    <#case "vy">
-      <#return true>
-    <#default>
-      <#return false>
-  </#switch>
-</#function>
-<#function getGithubId apacheId>
-  <#switch apacheId>
-    <#case "ckozak">
-      <#return "carterkozak">
-    <#case "ggregory">
-      <#return "garydgregory">
-    <#case "mattsicker">
-      <#return "jvz">
-    <#case "pkarwasz">
-      <#return "ppkarwasz">
-    <#case "rpopma">
-      <#return "remkop">
-    <#default>
-      <#return apacheId>
-  </#switch>
-</#function>
-<#if entriesByType?size gt 0>= ${release.version}<#if release.date?has_content> (${release.date})</#if>
-<#list entriesByType as entryType, entries>
-
-== ${entryType?capitalize}
-
-<#list entries as entry>
-<@compress single_line=true>
-  * <#list entry.issues as issue>
-    ${issue.link}[${issue.id}]${issue?has_next?string(", ", ":")}
-    </#list>
-  ${entry.description.text?ensure_ends_with(".")}
-  <#assign first = true>
-  <#assign committer = "">
-  <#list entry.authors as author>
-    <#if isCommitter(author.id!"")>
-      <#assign committer = author.id>
-    <#else>
-      ${first?string("Thanks to ", ", ")}
-      <#if author.name?has_content>
-        <#if author.id?has_content>
-          https://github.com/${author.id}[${author.name}].
-        <#else>
-          ${author.name}.
-        </#if>
-      <#else>
-        https://github.com/${author.id}[${author.id}].
-      </#if>
-    </#if>
-  </#list>
-  <#if committer?has_content>
-    (https://github.com/${getGithubId(committer)}[${committer}])
-  </#if>
-</...@compress>
-
-</#list>
-</#list>
-</#if>