You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2026/08/27 15:21:59 UTC
(logging-log4j2) branch fix/2.x/merge-java9-modules created (now cd65656e1b)
This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a change to branch fix/2.x/merge-java9-modules
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
at cd65656e1b Merge `log4j-*-java9` modules into `log4j-api` and `log4j-core`
This branch includes the following new commits:
new cd65656e1b Merge `log4j-*-java9` modules into `log4j-api` and `log4j-core`
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-log4j2) 01/01: Merge `log4j-*-java9` modules into `log4j-api` and `log4j-core`
Posted by pk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a commit to branch fix/2.x/merge-java9-modules
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit cd65656e1bd05ade4a6bfa2b339edc2519b96718
Author: Piotr P. Karwasz <pk...@apache.org>
AuthorDate: Thu Aug 27 17:18:11 2026 +0200
Merge `log4j-*-java9` modules into `log4j-api` and `log4j-core`
The `log4j-api-java9` and `log4j-core-java9` modules are a relict from
an era where multi-release JAR content could not be produced by the
consuming Maven module itself. Each compiled a handful of Java 9
sources (padded with stub classes to satisfy the compiler), zipped them
in a `classes/META-INF/versions/9` layout and had the consumer unpack
the zip into `target` at `prepare-package`.
Compile the Java 9 sources directly in `log4j-api` and `log4j-core`
instead, using a second `maven-compiler-plugin` execution over
`src/main/java9` with `<release>9</release>` and
`<multiReleaseOutput>true</multiReleaseOutput>`. The execution stays
bound to `prepare-package` so that `bnd-maven-plugin` (at
`process-classes`) never sees the versioned classes, as before; the
`Multi-Release: true` manifest entry keeps coming from the
`bnd-multi-release` property. The published artifacts are unchanged:
the versioned class list and bytecode are identical, and the stubs
are no longer needed since the real classes are on the compile
classpath.
The Java 9 `StackLocator` tests move to `log4j-api-test` as a
`maven-failsafe-plugin` integration test running against the packaged
multi-release JAR, with a guard assertion that the
`META-INF/versions/9` variant is actually loaded. The two
`getCurrentStackTrace` tests only passed against the old module's
stubbed `PrivateSecurityManagerStackTraceUtil` and are dropped: against
the real classes they exercise the `SecurityManager` path, which
`StackLocatorUtilTest` already covers. The Java 9 `ProcessIdUtilTest`
was assertion-identical to the existing one in `log4j-api-test`.
Assisted-By: Claude Fable 5 <no...@anthropic.com>
---
log4j-api-java9/.gitignore | 1 -
log4j-api-java9/pom.xml | 104 ---------------------
log4j-api-java9/src/assembly/java9.xml | 36 -------
.../main/java/org/apache/logging/log4j/Dummy.java | 23 -----
.../org/apache/logging/log4j/message/Dummy.java | 23 -----
.../logging/log4j/message/ThreadDumpMessage.java | 25 -----
.../org/apache/logging/log4j/simple/Dummy.java | 23 -----
.../org/apache/logging/log4j/spi/Provider.java | 23 -----
.../org/apache/logging/log4j/status/Dummy.java | 23 -----
.../log4j/util/EnvironmentPropertySource.java | 23 -----
.../org/apache/logging/log4j/util/LoaderUtil.java | 28 ------
.../util/PrivateSecurityManagerStackTraceUtil.java | 34 -------
.../apache/logging/log4j/util/PropertySource.java | 23 -----
.../log4j/util/SystemPropertiesPropertySource.java | 23 -----
.../log4j/util/internal/SerializationUtil.java | 31 ------
.../log4j/util/java9/ProcessIdUtilTest.java | 31 ------
log4j-api-test/pom.xml | 23 +++++
.../log4j/util/java9/StackLocatorJava9IT.java | 75 ++++++---------
log4j-api/pom.xml | 48 +++-------
.../org/apache/logging/log4j/util/Base64Util.java | 0
.../apache/logging/log4j/util/ProcessIdUtil.java | 0
.../apache/logging/log4j/util/StackLocator.java | 0
.../util/internal/DefaultObjectInputFilter.java | 0
log4j-core-java9/.gitignore | 1 -
log4j-core-java9/pom.xml | 92 ------------------
log4j-core-java9/src/assembly/java9.xml | 37 --------
.../logging/log4j/core/impl/ExtendedClassInfo.java | 43 ---------
.../core/jackson/StackTraceElementConstants.java | 31 ------
.../log4j/core/pattern/PlainTextRenderer.java | 30 ------
.../logging/log4j/core/pattern/TextRenderer.java | 30 ------
.../apache/logging/log4j/core/util/Integers.java | 27 ------
.../org/apache/logging/log4j/core/util/Dummy.java | 23 -----
log4j-core/pom.xml | 49 +++-------
.../log4j/core/impl/ExtendedStackTraceElement.java | 0
.../jackson/ExtendedStackTraceElementMixIn.java | 0
.../Log4jStackTraceElementDeserializer.java | 0
.../log4j/core/jackson/StackTraceElementMixIn.java | 0
.../log4j/core/util/internal/UnsafeUtil.java | 0
log4j-parent/pom.xml | 14 ---
pom.xml | 4 -
src/changelog/.2.x.x/merge_java9_modules.xml | 12 +++
41 files changed, 89 insertions(+), 924 deletions(-)
diff --git a/log4j-api-java9/.gitignore b/log4j-api-java9/.gitignore
deleted file mode 100644
index ae3c172604..0000000000
--- a/log4j-api-java9/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/log4j-api-java9/pom.xml b/log4j-api-java9/pom.xml
deleted file mode 100644
index 5112014f8a..0000000000
--- a/log4j-api-java9/pom.xml
+++ /dev/null
@@ -1,104 +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.
- -->
-<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</artifactId>
- <version>${revision}</version>
- <relativePath>../log4j-parent</relativePath>
- </parent>
- <artifactId>log4j-api-java9</artifactId>
- <packaging>pom</packaging>
- <name>Apache Log4j API Java 9 support</name>
- <description>The Apache Log4j API (Java 9)</description>
- <properties>
- <maven.deploy.skip>true</maven.deploy.skip>
- <maven.compiler.release>9</maven.compiler.release>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter-engine</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <execution>
- <id>zip</id>
- <goals>
- <goal>single</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <finalName>log4j-api-java9-${project.version}</finalName>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>src/assembly/java9.xml</descriptor>
- </descriptors>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <executions>
- <execution>
- <id>default-compile</id>
- <goals>
- <goal>compile</goal>
- </goals>
- </execution>
- <execution>
- <id>default-test-compile</id>
- <goals>
- <goal>testCompile</goal>
- </goals>
- <phase>test-compile</phase>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <executions>
- <!-- Uses a different id than `default-test` to ignore the `java8-tests` profile -->
- <execution>
- <id>run-tests</id>
- <goals>
- <goal>test</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/log4j-api-java9/src/assembly/java9.xml b/log4j-api-java9/src/assembly/java9.xml
deleted file mode 100644
index 0aa94e150f..0000000000
--- a/log4j-api-java9/src/assembly/java9.xml
+++ /dev/null
@@ -1,36 +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>
- <baseDirectory>/</baseDirectory>
- <fileSets>
- <fileSet>
- <directory>${project.build.outputDirectory}</directory>
- <outputDirectory>/classes/META-INF/versions/9</outputDirectory>
- <includes>
- <include>org/apache/logging/log4j/util/Base64Util.class</include>
- <include>org/apache/logging/log4j/util/ProcessIdUtil.class</include>
- <include>org/apache/logging/log4j/util/StackLocator.class</include>
- <include>org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.class</include>
- </includes>
- </fileSet>
- </fileSets>
-</assembly>
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/Dummy.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/Dummy.java
deleted file mode 100644
index a2b60d2fe2..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/Dummy.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Dummy {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/Dummy.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/Dummy.java
deleted file mode 100644
index 343013dcd4..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/Dummy.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.message;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Dummy {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
deleted file mode 100644
index 2cef3a24ec..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
+++ /dev/null
@@ -1,25 +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.
- */
-package org.apache.logging.log4j.message;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class ThreadDumpMessage {
- public static interface ThreadInfoFactory {}
-}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/simple/Dummy.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/simple/Dummy.java
deleted file mode 100644
index 25f4cf4d22..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/simple/Dummy.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.simple;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Dummy {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/spi/Provider.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/spi/Provider.java
deleted file mode 100644
index 2f6fbdf314..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/spi/Provider.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.spi;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Provider {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/status/Dummy.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/status/Dummy.java
deleted file mode 100644
index 0004af0bfb..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/status/Dummy.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.status;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Dummy {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/EnvironmentPropertySource.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/EnvironmentPropertySource.java
deleted file mode 100644
index bf78f35df5..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/EnvironmentPropertySource.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.util;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class EnvironmentPropertySource implements PropertySource {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
deleted file mode 100644
index 6eb2c71042..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ /dev/null
@@ -1,28 +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.
- */
-package org.apache.logging.log4j.util;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public final class LoaderUtil {
-
- public static ClassLoader getThreadContextClassLoader() {
- return LoaderUtil.class.getClassLoader();
- }
-}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PrivateSecurityManagerStackTraceUtil.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PrivateSecurityManagerStackTraceUtil.java
deleted file mode 100644
index 9fb9a4ee56..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PrivateSecurityManagerStackTraceUtil.java
+++ /dev/null
@@ -1,34 +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.
- */
-package org.apache.logging.log4j.util;
-
-import java.util.Deque;
-
-/**
- * This is a dummy class and is only here to allow this module to compile. It will not
- * be copied into the log4j-api module.
- */
-final class PrivateSecurityManagerStackTraceUtil {
-
- static boolean isEnabled() {
- return false;
- }
-
- static Deque<Class<?>> getCurrentStackTrace() {
- return null;
- }
-}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PropertySource.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PropertySource.java
deleted file mode 100644
index 56e6259b5d..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/PropertySource.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.util;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public interface PropertySource {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/SystemPropertiesPropertySource.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/SystemPropertiesPropertySource.java
deleted file mode 100644
index ec8a479294..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/SystemPropertiesPropertySource.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.util;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class SystemPropertiesPropertySource implements PropertySource {}
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java b/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java
deleted file mode 100644
index ddade3dd8a..0000000000
--- a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java
+++ /dev/null
@@ -1,31 +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.
- */
-package org.apache.logging.log4j.util.internal;
-
-import java.util.List;
-
-/**
- * Dummy class for compilation purposes only.
- */
-public final class SerializationUtil {
- public static final List<String> REQUIRED_JAVA_CLASSES = List.of();
- public static final List<String> REQUIRED_JAVA_PACKAGES = List.of();
-
- public static String stripArray(final Class<?> clazz) {
- return null;
- }
-}
diff --git a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/ProcessIdUtilTest.java b/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/ProcessIdUtilTest.java
deleted file mode 100644
index 1a24860f57..0000000000
--- a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/ProcessIdUtilTest.java
+++ /dev/null
@@ -1,31 +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.
- */
-package org.apache.logging.log4j.util.java9;
-
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import org.apache.logging.log4j.util.ProcessIdUtil;
-import org.junit.jupiter.api.Test;
-
-class ProcessIdUtilTest {
-
- @Test
- void processIdTest() {
- final String processId = ProcessIdUtil.getProcessId();
- assertNotEquals(processId, ProcessIdUtil.DEFAULT_PROCESSID, "ProcessId is default");
- }
-}
diff --git a/log4j-api-test/pom.xml b/log4j-api-test/pom.xml
index aef8a1b5d6..9e5932f765 100644
--- a/log4j-api-test/pom.xml
+++ b/log4j-api-test/pom.xml
@@ -177,6 +177,29 @@
</configuration>
</plugin>
+ <!-- Runs the tests for the Java 9 variants of `log4j-api` classes.
+ These need to run against the packaged multi-release JAR, hence the `integration-test` phase. -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>java9-variant-tests</id>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ <configuration>
+ <!-- Restricted to the `java9` package: `StackLocatorTestIT` predates this binding,
+ installs a `SecurityManager` and is not runnable on the build JDK as-is. -->
+ <includes>
+ <include>org/apache/logging/log4j/util/java9/*IT.java</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
</plugins>
</build>
</project>
diff --git a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorJava9IT.java
similarity index 66%
rename from log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorTest.java
rename to log4j-api-test/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorJava9IT.java
index cc8f61218a..42d54cefe0 100644
--- a/log4j-api-java9/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/java9/StackLocatorJava9IT.java
@@ -16,49 +16,41 @@
*/
package org.apache.logging.log4j.util.java9;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;
-import java.util.Deque;
-import java.util.Stack;
import org.apache.logging.log4j.util.StackLocator;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-class StackLocatorTest {
+/**
+ * Tests the Java 9 variant of {@link StackLocator} contained in the {@code META-INF/versions/9} directory of
+ * {@code log4j-api.jar}.
+ * <p>
+ * This test must run against the packaged multi-release JAR, hence it is an integration test.
+ * </p>
+ */
+class StackLocatorJava9IT {
+
+ @BeforeAll
+ static void assertJava9VariantLoaded() {
+ assertThat(StackLocator.class.getResource("StackLocator.class"))
+ .asString()
+ .as("java9 variant of StackLocator must be loaded from the MRJ")
+ .contains("META-INF/versions/9");
+ }
@Test
void testGetCallerClass() {
- final Class<?> expected = StackLocatorTest.class;
+ final Class<?> expected = StackLocatorJava9IT.class;
final StackLocator stackLocator = StackLocator.getInstance();
final Class<?> actual = stackLocator.getCallerClass(1);
assertSame(expected, actual);
}
- @Test
- void testGetCallerClassNameViaStackTrace() throws Exception {
- final Class<?> expected = StackLocatorTest.class;
- final Class<?> actual = Class.forName(new Throwable().getStackTrace()[0].getClassName());
- assertSame(expected, actual);
- }
-
- @Test
- void testGetCurrentStackTrace() {
- final StackLocator stackLocator = StackLocator.getInstance();
- final Deque<Class<?>> classes = stackLocator.getCurrentStackTrace();
- final Stack<Class<?>> reversed = new Stack<>();
- reversed.ensureCapacity(classes.size());
- while (!classes.isEmpty()) {
- reversed.push(classes.removeLast());
- }
- while (reversed.peek() != StackLocator.class) {
- reversed.pop();
- }
- reversed.pop(); // ReflectionUtil
- assertSame(StackLocatorTest.class, reversed.pop());
- }
-
@Test
void testGetCallerClassViaName() {
Inner.assertCallerClassViaName();
@@ -71,14 +63,14 @@ class StackLocatorTest {
private static class Inner {
private static void assertCallerClassViaName() {
- final Class<?> expected = StackLocatorTest.class;
+ final Class<?> expected = StackLocatorJava9IT.class;
final StackLocator stackLocator = StackLocator.getInstance();
final Class<?> actual = stackLocator.getCallerClass(Inner.class.getName(), "");
assertSame(expected, actual);
}
private static void assertCallerClassViaAnchorClass() {
- final Class<?> expected = StackLocatorTest.class;
+ final Class<?> expected = StackLocatorJava9IT.class;
final StackLocator stackLocator = StackLocator.getInstance();
final Class<?> actual = stackLocator.getCallerClass(Inner.class);
assertSame(expected, actual);
@@ -113,32 +105,25 @@ class StackLocatorTest {
private StackTraceElement quux() {
final StackLocator stackLocator = StackLocator.getInstance();
- return stackLocator.calcLocation("org.apache.logging.log4j.util.java9.StackLocatorTest$Bar");
+ return stackLocator.calcLocation("org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Bar");
}
@Test
void testCalcLocation() {
/*
* We are setting up a stack trace that looks like:
- * - org.apache.logging.log4j.util.test.StackLocatorTest#quux(line:118)
- * - org.apache.logging.log4j.util.test.StackLocatorTest$Bar#baz(line:112)
- * - org.apache.logging.log4j.util.test.StackLocatorTest$Bar#bar(line:108)
- * - org.apache.logging.log4j.util.test.StackLocatorTest$Foo(line:100)
+ * - org.apache.logging.log4j.util.java9.StackLocatorJava9IT#quux
+ * - org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Bar#baz
+ * - org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Bar#bar
+ * - org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Foo#foo
*
- * We are pretending that org.apache.logging.log4j.util.test.StackLocatorTest$Bar is the logging class, and
- * org.apache.logging.log4j.util.test.StackLocatorTest$Foo is where the log line emanated.
+ * We are pretending that org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Bar is the logging class, and
+ * org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Foo is where the log line emanated.
*/
final StackTraceElement element = new Foo().foo();
- assertEquals("org.apache.logging.log4j.util.java9.StackLocatorTest$Foo", element.getClassName());
+ assertEquals("org.apache.logging.log4j.util.java9.StackLocatorJava9IT$Foo", element.getClassName());
// The line number below may need adjustment if this file is changed.
- assertEquals(99, element.getLineNumber());
- }
-
- @Test
- void testTopElementInStackTrace() {
- final StackLocator stackLocator = StackLocator.getInstance();
- final Deque<Class<?>> classes = stackLocator.getCurrentStackTrace();
- assertSame(StackLocator.class, classes.getFirst());
+ assertEquals(91, element.getLineNumber());
}
@Test
diff --git a/log4j-api/pom.xml b/log4j-api/pom.xml
index 4b0525466d..00f985142b 100644
--- a/log4j-api/pom.xml
+++ b/log4j-api/pom.xml
@@ -77,50 +77,26 @@
<build>
<plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>add-source</id>
- <goals>
- <goal>add-source</goal>
- </goals>
- <phase>generate-sources</phase>
- <configuration>
- <sources>
- <source>${project.build.directory}/log4j-api-java9</source>
- </sources>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
+ <artifactId>maven-compiler-plugin</artifactId>
<executions>
+ <!-- Compiles the Java 9 variants of some classes to `META-INF/versions/9`.
+ Bound to `prepare-package` so that `bnd-maven-plugin` (running at `process-classes`)
+ does not see the versioned classes.
+ The `Multi-Release: true` manifest entry is provided by the `bnd-multi-release` property above. -->
<execution>
- <id>unpack-classes</id>
+ <id>compile-java9</id>
<goals>
- <goal>unpack</goal>
+ <goal>compile</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-java9</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- <overWrite>false</overWrite>
- </artifactItem>
- </artifactItems>
- <includes>**/*.class</includes>
- <excludes>**/*.java</excludes>
- <outputDirectory>${project.build.directory}</outputDirectory>
- <overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>true</overWriteSnapshots>
+ <release>9</release>
+ <compileSourceRoots>
+ <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
+ </compileSourceRoots>
+ <multiReleaseOutput>true</multiReleaseOutput>
</configuration>
</execution>
</executions>
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/Base64Util.java b/log4j-api/src/main/java9/org/apache/logging/log4j/util/Base64Util.java
similarity index 100%
rename from log4j-api-java9/src/main/java/org/apache/logging/log4j/util/Base64Util.java
rename to log4j-api/src/main/java9/org/apache/logging/log4j/util/Base64Util.java
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java b/log4j-api/src/main/java9/org/apache/logging/log4j/util/ProcessIdUtil.java
similarity index 100%
rename from log4j-api-java9/src/main/java/org/apache/logging/log4j/util/ProcessIdUtil.java
rename to log4j-api/src/main/java9/org/apache/logging/log4j/util/ProcessIdUtil.java
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java9/org/apache/logging/log4j/util/StackLocator.java
similarity index 100%
rename from log4j-api-java9/src/main/java/org/apache/logging/log4j/util/StackLocator.java
rename to log4j-api/src/main/java9/org/apache/logging/log4j/util/StackLocator.java
diff --git a/log4j-api-java9/src/main/java/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.java b/log4j-api/src/main/java9/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.java
similarity index 100%
rename from log4j-api-java9/src/main/java/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.java
rename to log4j-api/src/main/java9/org/apache/logging/log4j/util/internal/DefaultObjectInputFilter.java
diff --git a/log4j-core-java9/.gitignore b/log4j-core-java9/.gitignore
deleted file mode 100644
index ae3c172604..0000000000
--- a/log4j-core-java9/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/log4j-core-java9/pom.xml b/log4j-core-java9/pom.xml
deleted file mode 100644
index 2cb3c3d07a..0000000000
--- a/log4j-core-java9/pom.xml
+++ /dev/null
@@ -1,92 +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.
- -->
-<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</artifactId>
- <version>${revision}</version>
- <relativePath>../log4j-parent</relativePath>
- </parent>
- <artifactId>log4j-core-java9</artifactId>
- <packaging>pom</packaging>
- <name>Apache Log4j Implementation Java 9 support</name>
- <description>The Apache Log4j Implementation (Java 9)</description>
- <properties>
- <maven.compiler.release>9</maven.compiler.release>
- <maven.deploy.skip>true</maven.deploy.skip>
- <sign.skip>true</sign.skip>
- </properties>
- <dependencies>
- <!-- Naturally, all implementations require the log4j-api JAR -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-xml</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-core</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <execution>
- <id>zip</id>
- <goals>
- <goal>single</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <finalName>log4j-core-java9-${project.version}</finalName>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>src/assembly/java9.xml</descriptor>
- </descriptors>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <executions>
- <execution>
- <id>default-compile</id>
- <goals>
- <goal>compile</goal>
- </goals>
- <phase>compile</phase>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/log4j-core-java9/src/assembly/java9.xml b/log4j-core-java9/src/assembly/java9.xml
deleted file mode 100644
index 4349d38f14..0000000000
--- a/log4j-core-java9/src/assembly/java9.xml
+++ /dev/null
@@ -1,37 +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>
- <baseDirectory>/</baseDirectory>
- <fileSets>
- <fileSet>
- <directory>${project.build.outputDirectory}</directory>
- <outputDirectory>/classes/META-INF/versions/9</outputDirectory>
- <includes>
- <include>org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.class</include>
- <include>org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.class</include>
- <include>org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.class</include>
- <include>org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.class</include>
- <include>org/apache/logging/log4j/core/util/internal/UnsafeUtil*.class</include>
- </includes>
- </fileSet>
- </fileSets>
-</assembly>
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/impl/ExtendedClassInfo.java b/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/impl/ExtendedClassInfo.java
deleted file mode 100644
index 61faeb9e81..0000000000
--- a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/impl/ExtendedClassInfo.java
+++ /dev/null
@@ -1,43 +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.
- */
-package org.apache.logging.log4j.core.impl;
-
-import java.io.Serializable;
-import org.apache.logging.log4j.core.pattern.TextRenderer;
-
-/**
- * Dummy class to let ExtendedStackTracElement to compile. It will not be copied
- * to `log4j-core`.
- */
-public class ExtendedClassInfo implements Serializable {
-
- public ExtendedClassInfo(final boolean exact, final String location, final String version) {}
-
- public boolean getExact() {
- return false;
- }
-
- public String getLocation() {
- return null;
- }
-
- public String getVersion() {
- return null;
- }
-
- public void renderOn(final StringBuilder output, final TextRenderer textRenderer) {}
-}
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/StackTraceElementConstants.java b/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/StackTraceElementConstants.java
deleted file mode 100644
index b54a9bc33e..0000000000
--- a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/StackTraceElementConstants.java
+++ /dev/null
@@ -1,31 +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.
- */
-package org.apache.logging.log4j.core.jackson;
-
-/**
- * Defines constants use for naming stack trace elements.
- */
-public class StackTraceElementConstants {
-
- public static final String ATTR_CLASS_LOADER_NAME = "classLoaderName";
- public static final String ATTR_MODULE = "module";
- public static final String ATTR_MODULE_VERSION = "moduleVersion";
- public static final String ATTR_CLASS = "class";
- public static final String ATTR_FILE = "file";
- public static final String ATTR_LINE = "line";
- public static final String ATTR_METHOD = "method";
-}
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/PlainTextRenderer.java b/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/PlainTextRenderer.java
deleted file mode 100644
index a1c187bba3..0000000000
--- a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/PlainTextRenderer.java
+++ /dev/null
@@ -1,30 +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.
- */
-package org.apache.logging.log4j.core.pattern;
-
-import org.apache.logging.log4j.core.impl.ExtendedStackTraceElement;
-
-/**
- * Dummy class to allow {@link ExtendedStackTraceElement} to compile. It will
- * not be copied to `log4j-core`.
- */
-public abstract class PlainTextRenderer implements TextRenderer {
-
- public static PlainTextRenderer getInstance() {
- return null;
- }
-}
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/TextRenderer.java b/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/TextRenderer.java
deleted file mode 100644
index d7983969e6..0000000000
--- a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/pattern/TextRenderer.java
+++ /dev/null
@@ -1,30 +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.
- */
-package org.apache.logging.log4j.core.pattern;
-
-import org.apache.logging.log4j.core.impl.ExtendedStackTraceElement;
-
-/**
- * Dummy class to allow {@link ExtendedStackTraceElement} to compile. It will
- * not be copied to `log4j-core`.
- */
-public interface TextRenderer {
-
- void render(String input, StringBuilder output, String styleName);
-
- void render(StringBuilder input, StringBuilder output);
-}
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/util/Integers.java b/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/util/Integers.java
deleted file mode 100644
index 8dbb6320a9..0000000000
--- a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/util/Integers.java
+++ /dev/null
@@ -1,27 +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.
- */
-package org.apache.logging.log4j.core.util;
-
-/**
- * Dummy class used for compilation. It will not be copied to `log4j-core`.
- */
-public class Integers {
-
- public static int parseInt(String value) {
- return 0;
- }
-}
diff --git a/log4j-core-java9/src/test/java/org/apache/logging/log4j/core/util/Dummy.java b/log4j-core-java9/src/test/java/org/apache/logging/log4j/core/util/Dummy.java
deleted file mode 100644
index 047439d5d3..0000000000
--- a/log4j-core-java9/src/test/java/org/apache/logging/log4j/core/util/Dummy.java
+++ /dev/null
@@ -1,23 +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.
- */
-package org.apache.logging.log4j.core.util;
-
-/**
- * This is a dummy class and is only here to allow module-info.java to compile. It will not
- * be copied into the log4j-api module.
- */
-public class Dummy {}
diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml
index b2f34d4ab9..e0c8205f67 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core/pom.xml
@@ -227,51 +227,26 @@
<build>
<plugins>
- <!-- Add Java 9+ code for the MRJ -->
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>add-source</id>
- <goals>
- <goal>add-source</goal>
- </goals>
- <phase>generate-sources</phase>
- <configuration>
- <sources>
- <source>${project.build.directory}/log4j-core-java9</source>
- </sources>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
+ <artifactId>maven-compiler-plugin</artifactId>
<executions>
+ <!-- Compiles the Java 9 variants of some classes to `META-INF/versions/9`.
+ Bound to `prepare-package` so that `bnd-maven-plugin` (running at `process-classes`)
+ does not see the versioned classes.
+ The `Multi-Release: true` manifest entry is provided by the `bnd-multi-release` property above. -->
<execution>
- <id>unpack-classes</id>
+ <id>compile-java9</id>
<goals>
- <goal>unpack</goal>
+ <goal>compile</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core-java9</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- <overWrite>false</overWrite>
- </artifactItem>
- </artifactItems>
- <includes>**/*.class</includes>
- <excludes>**/*.java</excludes>
- <outputDirectory>${project.build.directory}</outputDirectory>
- <overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>true</overWriteSnapshots>
+ <release>9</release>
+ <compileSourceRoots>
+ <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
+ </compileSourceRoots>
+ <multiReleaseOutput>true</multiReleaseOutput>
</configuration>
</execution>
</executions>
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java b/log4j-core/src/main/java9/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
similarity index 100%
rename from log4j-core-java9/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
rename to log4j-core/src/main/java9/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java b/log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java
similarity index 100%
rename from log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java
rename to log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.java
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java b/log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java
similarity index 100%
rename from log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java
rename to log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.java
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java b/log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java
similarity index 100%
rename from log4j-core-java9/src/main/java/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java
rename to log4j-core/src/main/java9/org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.java
diff --git a/log4j-core-java9/src/main/java/org/apache/logging/log4j/core/util/internal/UnsafeUtil.java b/log4j-core/src/main/java9/org/apache/logging/log4j/core/util/internal/UnsafeUtil.java
similarity index 100%
rename from log4j-core-java9/src/main/java/org/apache/logging/log4j/core/util/internal/UnsafeUtil.java
rename to log4j-core/src/main/java9/org/apache/logging/log4j/core/util/internal/UnsafeUtil.java
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index 28c371abef..846d01dcd1 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -234,20 +234,6 @@
<scope>import</scope>
</dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api-java9</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- </dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core-java9</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- </dependency>
-
<!-- Dummy dependency to trick `dependabot` into updating the `log4j-transform.version` property: -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
diff --git a/pom.xml b/pom.xml
index be528c33bb..49702846ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -240,10 +240,6 @@
<!-- the parent POM must come first: -->
<module>log4j-parent</module>
- <!-- Next unpublished, but internally and *implicitly* (e.g., as a plugin dependency) consumed modules in alphabetical order: -->
- <module>log4j-api-java9</module>
- <module>log4j-core-java9</module>
-
<!-- Last comes the rest of the modules in alphabetical order.
Note that modules here must have a corresponding entry in `dependencyManagement > dependencies` block below! -->
<module>log4j-1.2-api</module>
diff --git a/src/changelog/.2.x.x/merge_java9_modules.xml b/src/changelog/.2.x.x/merge_java9_modules.xml
new file mode 100644
index 0000000000..228665ce14
--- /dev/null
+++ b/src/changelog/.2.x.x/merge_java9_modules.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns="https://logging.apache.org/xml/ns"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ https://logging.apache.org/xml/ns
+ https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+ type="changed">
+ <description format="asciidoc">
+ Merge the auxiliary `log4j-api-java9` and `log4j-core-java9` modules into `log4j-api` and `log4j-core` by compiling the Java-9-specific sources directly into `META-INF/versions/9` of each JAR.
+ The published artifacts are unchanged.
+ </description>
+</entry>