diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
index 5e7fa1e63ce..6c73c48d8d7 100644
--- a/.github/dependabot.yaml
+++ b/.github/dependabot.yaml
@@ -90,9 +90,6 @@ updates:
registries:
- maven-central
ignore:
- # `com.github.spotbugs:spotbugs-annotations:4.9.0` and onwards require Java 11
- - dependency-name: "com.github.spotbugs:spotbugs-annotations"
- versions: [ "[4.9.0,)" ]
# Jetty 10.x does not have an internal logging API
- dependency-name: "org.eclipse.jetty:*"
versions: [ "[10,)" ]
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java b/log4j-1.2-api/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java
index 79129edbb34..0c84d3d0cee 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.LineNumberReader;
@@ -24,6 +23,7 @@
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.spi.ThrowableRenderer;
/**
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/FileAppender.java b/log4j-1.2-api/src/main/java/org/apache/log4j/FileAppender.java
index 25b6edf77d2..69996e7da4d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/FileAppender.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/FileAppender.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
@@ -26,6 +25,7 @@
import java.io.Writer;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.QuietWriter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.spi.ErrorCode;
/**
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/Hierarchy.java b/log4j-1.2-api/src/main/java/org/apache/log4j/Hierarchy.java
index 850ea52bd61..d1471558678 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/Hierarchy.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/Hierarchy.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
@@ -25,6 +24,7 @@
import java.util.concurrent.ConcurrentMap;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.legacy.core.ContextUtil;
import org.apache.log4j.or.ObjectRenderer;
import org.apache.log4j.or.RendererMap;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java b/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
index 647b86e5b92..9892109b9b6 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
@@ -37,6 +36,7 @@
import org.apache.log4j.helpers.FileWatchdog;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.or.RendererMap;
import org.apache.log4j.spi.Configurator;
import org.apache.log4j.spi.ErrorHandler;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/RollingFileAppender.java b/log4j-1.2-api/src/main/java/org/apache/log4j/RollingFileAppender.java
index ce03ec2bc8a..315ff108d70 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/RollingFileAppender.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/RollingFileAppender.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.io.InterruptedIOException;
@@ -24,6 +23,7 @@
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.spi.LoggingEvent;
/**
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/FileWatchdog.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/FileWatchdog.java
index ecf686faf4f..a7c9846b2ba 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/FileWatchdog.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/FileWatchdog.java
@@ -16,8 +16,8 @@
*/
package org.apache.log4j.helpers;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
/**
* Checks every now and then that a certain file has not changed. If it has, then call the {@link #doOnChange} method.
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
index f99ad0b8c7c..5e64f0c8137 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
@@ -18,10 +18,10 @@
import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Level;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
/**
* An extension of the Level class that provides support for java.util.logging Levels.
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/package-info.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/package-info.java
index b94af3ba614..a6e54fdb7b1 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/package-info.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/package-info.java
@@ -18,7 +18,7 @@
* Log4j 1.x compatibility layer.
*/
@Export
-@Version("2.20.3")
+@Version("2.26.0")
package org.apache.log4j.helpers;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/internal/annotation/SuppressFBWarnings.java b/log4j-1.2-api/src/main/java/org/apache/log4j/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..25809ea12df
--- /dev/null
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.log4j.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
index a508218b119..ed7ff047ae4 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
@@ -16,12 +16,12 @@
*/
package org.apache.log4j.layout;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Node;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/package-info.java b/log4j-1.2-api/src/main/java/org/apache/log4j/package-info.java
index 7462396fa7f..e8b23234771 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/package-info.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/package-info.java
@@ -18,7 +18,7 @@
* Log4j 1.x compatibility layer.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.log4j;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
index 5aff69da56f..17e904d08c0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j.xml;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -34,6 +33,7 @@
import org.apache.log4j.config.PropertySetter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
index dd2a0312b06..a4e79161398 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j.xml;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.util.HashMap;
@@ -36,6 +35,7 @@
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertySetter;
import org.apache.log4j.helpers.OptionConverter;
+import org.apache.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.log4j.rewrite.RewritePolicy;
import org.apache.log4j.spi.AppenderAttachable;
import org.apache.log4j.spi.ErrorHandler;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/package-info.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/package-info.java
index b7c3d31598d..947cfd69652 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/package-info.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/package-info.java
@@ -18,7 +18,7 @@
* Log4j 1.x compatibility layer.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.log4j.xml;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/TestLogger.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/TestLogger.java
index e95f1e9bb67..3dd4278ec24 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/TestLogger.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/TestLogger.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.test;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
@@ -28,6 +27,7 @@
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.spi.AbstractLogger;
+import org.apache.logging.log4j.test.internal.annotation.SuppressFBWarnings;
/**
*
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/internal/annotation/SuppressFBWarnings.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..ced8d09001e
--- /dev/null
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/DirectoryCleaner.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/DirectoryCleaner.java
index 84c12b42109..efcd29753d9 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/DirectoryCleaner.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/DirectoryCleaner.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.test.junit;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
@@ -26,6 +25,7 @@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Collection;
import java.util.HashSet;
+import org.apache.logging.log4j.test.internal.annotation.SuppressFBWarnings;
import org.junit.jupiter.api.extension.ExtensionContext;
class DirectoryCleaner extends AbstractFileCleaner {
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/FileCleaner.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/FileCleaner.java
index 9a9500d53a6..bf49a7ea51a 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/FileCleaner.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/FileCleaner.java
@@ -16,13 +16,13 @@
*/
package org.apache.logging.log4j.test.junit;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.HashSet;
+import org.apache.logging.log4j.test.internal.annotation.SuppressFBWarnings;
import org.junit.jupiter.api.extension.ExtensionContext;
class FileCleaner extends AbstractFileCleaner {
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/SerialUtil.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/SerialUtil.java
index e568e415130..707fee87d3e 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/SerialUtil.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/SerialUtil.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.test.junit;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -25,6 +24,7 @@
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import org.apache.logging.log4j.test.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.util.Constants;
import org.apache.logging.log4j.util.FilteredObjectInputStream;
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/package-info.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/package-info.java
index 2a37b2933ff..ca324bf73a2 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/package-info.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.24.1")
+@Version("2.26.0")
package org.apache.logging.log4j.test.junit;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/package-info.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/package-info.java
index 5a0ebc45101..36413766c5a 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/package-info.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.21.1")
+@Version("2.26.0")
package org.apache.logging.log4j.test;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/status/StatusLoggerDateTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/status/StatusLoggerDateTest.java
index 0978587692a..55cd1577832 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/status/StatusLoggerDateTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/status/StatusLoggerDateTest.java
@@ -18,11 +18,11 @@
import static org.assertj.core.api.Assertions.assertThat;
-import edu.umd.cs.findbugs.annotations.Nullable;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Properties;
+import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/internal/annotation/SuppressFBWarnings.java b/log4j-api/src/main/java/org/apache/logging/log4j/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..2023a4cb062
--- /dev/null
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
index 1690893187f..4d36201e9e6 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.simple;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -25,6 +24,7 @@
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.spi.AbstractLogger;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java
index 55cced06f58..3286bb356d0 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java
@@ -16,9 +16,9 @@
*/
package org.apache.logging.log4j.simple;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.PrintStream;
import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.message.ParameterizedMessageFactory;
import org.apache.logging.log4j.simple.internal.SimpleProvider;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/package-info.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/package-info.java
index 29139a12ace..3e5667856f2 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/package-info.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/package-info.java
@@ -20,7 +20,7 @@
* Providers are able to be loaded at runtime.
*/
@Export
-@Version("2.24.1")
+@Version("2.26.0")
package org.apache.logging.log4j.simple;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java
index ce23ff5aa9b..7e7b2b2c92a 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java
@@ -18,13 +18,13 @@
import static java.util.Objects.requireNonNull;
-import edu.umd.cs.findbugs.annotations.Nullable;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.logging.log4j.Level;
+import org.jspecify.annotations.Nullable;
/**
* A {@link StatusListener} that writes to the console.
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
index 1b0dcf31dee..7cef97d94c1 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java
@@ -19,15 +19,15 @@
import static java.util.Objects.requireNonNull;
import static org.apache.logging.log4j.util.Chars.SPACE;
-import edu.umd.cs.findbugs.annotations.Nullable;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.message.Message;
+import org.jspecify.annotations.Nullable;
/**
* The Status data.
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
index 699dc66c8a7..06d8a547b04 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
@@ -18,8 +18,6 @@
import static java.util.Objects.requireNonNull;
-import edu.umd.cs.findbugs.annotations.Nullable;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
@@ -41,11 +39,13 @@
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.message.ParameterizedNoReferenceMessageFactory;
import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.util.Constants;
+import org.jspecify.annotations.Nullable;
/**
* Records events that occur in the logging system.
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/package-info.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/package-info.java
index 12fddb60395..25274a7b239 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/package-info.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/package-info.java
@@ -19,7 +19,7 @@
* used by applications reporting on the status of the logging system
*/
@Export
-@Version("2.23.1")
+@Version("2.26.0")
package org.apache.logging.log4j.status;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertyFilePropertySource.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertyFilePropertySource.java
index acb4310c3c3..4c665879ba0 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertyFilePropertySource.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertyFilePropertySource.java
@@ -16,12 +16,12 @@
*/
package org.apache.logging.log4j.util;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
/**
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
index 2b74606f081..d66c35c34c8 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
@@ -21,7 +21,6 @@
import aQute.bnd.annotation.Cardinality;
import aQute.bnd.annotation.Resolution;
import aQute.bnd.annotation.spi.ServiceConsumer;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
@@ -35,6 +34,7 @@
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.simple.internal.SimpleProvider;
import org.apache.logging.log4j.spi.LoggerContextFactory;
import org.apache.logging.log4j.spi.Provider;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java
index 6180f47421f..3cb70668981 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/internal/SerializationUtil.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.util.internal;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -29,6 +28,7 @@
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.List;
+import org.apache.logging.log4j.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.FilteredObjectInputStream;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/package-info.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/package-info.java
index 23fcfbd931d..f20d42965cc 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/package-info.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/package-info.java
@@ -20,7 +20,7 @@
* There are no guarantees for binary or logical compatibility in this package.
*/
@Export
-@Version("2.25.0")
+@Version("2.26.0")
package org.apache.logging.log4j.util;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/internal/annotation/SuppressFBWarnings.java b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..480ad326075
--- /dev/null
+++ b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.appserver.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/Log4j2Logger.java b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/Log4j2Logger.java
index 70b93443287..b520c04f5ba 100644
--- a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/Log4j2Logger.java
+++ b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/Log4j2Logger.java
@@ -16,9 +16,9 @@
*/
package org.apache.logging.log4j.appserver.jetty;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.appserver.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.log4j.spi.LoggerContext;
import org.eclipse.jetty.util.log.AbstractLogger;
diff --git a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/package-info.java b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/package-info.java
index 41b7bce8119..d4e606ba467 100644
--- a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/package-info.java
+++ b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/jetty/package-info.java
@@ -19,7 +19,7 @@
*/
@Open
@Export
-@Version("2.20.1")
+@Version("2.26.0")
package org.apache.logging.log4j.appserver.jetty;
import aQute.bnd.annotation.jpms.Open;
diff --git a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/TomcatLogger.java b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/TomcatLogger.java
index 11817c66189..2176acc494f 100644
--- a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/TomcatLogger.java
+++ b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/TomcatLogger.java
@@ -18,13 +18,13 @@
import aQute.bnd.annotation.Resolution;
import aQute.bnd.annotation.spi.ServiceProvider;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import org.apache.juli.logging.Log;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.appserver.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.log4j.spi.LoggerContext;
diff --git a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/package-info.java b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/package-info.java
index d8d724f4ebf..0a84c1f7081 100644
--- a/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/package-info.java
+++ b/log4j-appserver/src/main/java/org/apache/logging/log4j/appserver/tomcat/package-info.java
@@ -18,7 +18,7 @@
* Log4j integration with Apache Tomcat 8.5 or greater.
*/
@Export
-@Version("2.20.1")
+@Version("2.26.0")
package org.apache.logging.log4j.appserver.tomcat;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortFinder.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortFinder.java
index ffd7d0b2769..8758a6e0bb5 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortFinder.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortFinder.java
@@ -16,13 +16,13 @@
*/
package org.apache.logging.log4j.core.test;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.util.NoSuchElementException;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.status.StatusLogger;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/GcFreeLoggingTestUtil.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/GcFreeLoggingTestUtil.java
index ace41854670..a299334b051 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/GcFreeLoggingTestUtil.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/GcFreeLoggingTestUtil.java
@@ -21,7 +21,6 @@
import com.google.monitoring.runtime.instrumentation.AllocationRecorder;
import com.google.monitoring.runtime.instrumentation.Sampler;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.net.URL;
import java.nio.charset.Charset;
@@ -35,6 +34,7 @@
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.message.StringMapMessage;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
index 95ee5330ca0..e8dcc9fa60a 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
@@ -16,13 +16,13 @@
*/
package org.apache.logging.log4j.core.test.appender.db.jdbc;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.logging.log4j.core.appender.db.jdbc.AbstractConnectionSource;
import org.apache.logging.log4j.core.appender.db.jdbc.ConnectionSource;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
@SuppressFBWarnings("HARD_CODE_PASSWORD")
public class JdbcH2TestHelper {
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/package-info.java
index 638390f63ab..b49536fd023 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.20.3")
+@Version("2.26.0")
package org.apache.logging.log4j.core.test.appender.db.jdbc;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/internal/annotation/SuppressFBWarnings.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..c30fd886e4b
--- /dev/null
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java
index 4477b55da72..9fa720e66ec 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.test.junit;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
@@ -28,6 +27,7 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
import org.junit.Assert;
import org.junit.rules.ExternalResource;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/JdbcRule.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/JdbcRule.java
index d6f76b4fa26..76065470d51 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/JdbcRule.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/JdbcRule.java
@@ -16,13 +16,13 @@
*/
package org.apache.logging.log4j.core.test.junit;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.core.appender.db.jdbc.ConnectionSource;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/package-info.java
index 4103b148043..a92fa4c3452 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/package-info.java
@@ -20,7 +20,7 @@
* @see org.junit.rules.TestRule
*/
@Export
-@Version("2.23.1")
+@Version("2.26.0")
package org.apache.logging.log4j.core.test.junit;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/MockTcpSyslogServer.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/MockTcpSyslogServer.java
index 7fecbe9ef81..87a87030474 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/MockTcpSyslogServer.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/MockTcpSyslogServer.java
@@ -16,11 +16,11 @@
*/
package org.apache.logging.log4j.core.test.net.mock;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
public class MockTcpSyslogServer extends MockSyslogServer {
private final ServerSocket serverSocket;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/package-info.java
index 466921018df..a7501fb3cd1 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/mock/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.21.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.test.net.mock;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/TlsSyslogTestUtil.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/TlsSyslogTestUtil.java
index bb3b7691b63..a67aa3d7a93 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/TlsSyslogTestUtil.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/TlsSyslogTestUtil.java
@@ -16,9 +16,9 @@
*/
package org.apache.logging.log4j.core.test.net.ssl;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.Random;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
@SuppressFBWarnings("PREDICTABLE_RANDOM")
public class TlsSyslogTestUtil {
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/package-info.java
index 97a787665d0..734cd0dc601 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/net/ssl/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.logging.log4j.core.test.net.ssl;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/package-info.java
index 2199930f31f..70fbbc2b6f5 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.25.0")
+@Version("2.26.0")
@BaselineIgnore("2.25.0")
package org.apache.logging.log4j.core.test;
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/SimpleSmtpServer.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/SimpleSmtpServer.java
index c02b115d22e..42f3b05eacc 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/SimpleSmtpServer.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/SimpleSmtpServer.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.test.smtp;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -26,6 +25,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.apache.logging.log4j.core.test.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.util.Strings;
/**
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/package-info.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/package-info.java
index 3d4e74b7a9a..8b7122660aa 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/package-info.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/smtp/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.logging.log4j.core.test.smtp;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
index 619749eacf2..ebba3ba42fd 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
@@ -21,7 +21,6 @@
import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.fail;
-import edu.umd.cs.findbugs.annotations.Nullable;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -48,6 +47,7 @@
import org.apache.logging.log4j.core.net.ssl.SslKeyStoreConstants;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.CleanupMode;
import org.junit.jupiter.api.io.TempDir;
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlConfigurationPropsTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlConfigurationPropsTest.java
index 3437f787b8a..d421d58c3aa 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlConfigurationPropsTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlConfigurationPropsTest.java
@@ -22,7 +22,6 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import edu.umd.cs.findbugs.annotations.Nullable;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
@@ -31,6 +30,7 @@
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.test.junit.SetTestProperty;
import org.apache.logging.log4j.test.junit.UsingStatusLoggerMock;
+import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
index 6db471cb87a..da62cc24855 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
@@ -19,7 +19,6 @@
import static org.apache.logging.log4j.core.jmx.internal.JmxUtil.isJmxDisabled;
import static org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.SHUTDOWN_HOOK_MARKER;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
@@ -42,6 +41,7 @@
import org.apache.logging.log4j.core.config.NullConfiguration;
import org.apache.logging.log4j.core.config.Reconfigurable;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.jmx.Server;
import org.apache.logging.log4j.core.util.Cancellable;
import org.apache.logging.log4j.core.util.Constants;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index 75f933790d4..85d3c8da83e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -42,6 +41,7 @@
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.core.util.FileUtils;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
index 6a49f181c4c..5cd96e5430a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/HttpURLConnectionManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -33,6 +32,7 @@
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationException;
import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.net.ssl.LaxHostnameVerifier;
import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
import org.apache.logging.log4j.core.util.IOUtils;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
index 54ac2aace98..34a932f274f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.db.jdbc;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.Reader;
import java.io.Serializable;
import java.io.StringReader;
@@ -50,6 +49,7 @@
import org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException;
import org.apache.logging.log4j.core.config.plugins.convert.DateTypeConverter;
import org.apache.logging.log4j.core.config.plugins.convert.TypeConverters;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.core.util.Log4jThread;
import org.apache.logging.log4j.message.MapMessage;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/package-info.java
index 49a64405d80..02ea4343fc5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/package-info.java
@@ -19,7 +19,7 @@
* a JDBC driver on your classpath for the database you wish to log to.
*/
@Export
-@Version("2.20.1")
+@Version("2.26.0")
package org.apache.logging.log4j.core.appender.db.jdbc;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
index 6bc352b993f..f9953d60186 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
@@ -32,6 +31,7 @@
import org.apache.logging.log4j.LoggingException;
import org.apache.logging.log4j.core.appender.rolling.action.Action;
import org.apache.logging.log4j.core.appender.rolling.action.CompositeAction;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.lookup.StrSubstitutor;
import org.apache.logging.log4j.core.pattern.NotANumber;
import org.apache.logging.log4j.core.util.Integers;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index 969e37f5812..ea1bae76696 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -42,6 +41,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.lookup.StrSubstitutor;
import org.apache.logging.log4j.core.util.Integers;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DirectWriteRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DirectWriteRolloverStrategy.java
index 7694ce48a48..e105fa455b1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DirectWriteRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DirectWriteRolloverStrategy.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -41,6 +40,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.lookup.StrSubstitutor;
import org.apache.logging.log4j.core.util.Integers;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java
index a7622b2c5f8..e62419b6858 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java
@@ -16,13 +16,13 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.util.Objects;
import org.apache.logging.log4j.core.appender.rolling.action.Action;
import org.apache.logging.log4j.core.appender.rolling.action.CommonsCompressAction;
import org.apache.logging.log4j.core.appender.rolling.action.GzCompressAction;
import org.apache.logging.log4j.core.appender.rolling.action.ZipCompressAction;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* Enumerates over supported file extensions for compression.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index 8be7dd4f9c4..afdb7416585 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -46,6 +45,7 @@
import org.apache.logging.log4j.core.appender.rolling.action.AbstractAction;
import org.apache.logging.log4j.core.appender.rolling.action.Action;
import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.Log4jThreadFactory;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
index bd41ce31c7a..1c0a0241fe6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -28,6 +27,7 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.AppenderLoggingException;
import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.NullOutputStream;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
index 54f406ec8c3..5f7dedd50da 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.core.Core;
@@ -25,6 +24,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Integers;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractPathAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractPathAction.java
index c8d251f672f..b795d449bf3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractPathAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractPathAction.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling.action;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitor;
@@ -29,6 +28,7 @@
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.lookup.StrSubstitutor;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
index e7bb2376db7..5db648a1263 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling.action;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
@@ -25,6 +24,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* File rename action.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PosixViewAttributeAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PosixViewAttributeAction.java
index 51e038f1c13..f5149bb7fa8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PosixViewAttributeAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/PosixViewAttributeAction.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling.action;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
@@ -37,6 +36,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.lookup.StrSubstitutor;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.util.Strings;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
index 92d351e2de9..ec76a76d602 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.async;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -36,6 +35,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.jmx.RingBufferAdmin;
import org.apache.logging.log4j.core.util.Booleans;
import org.apache.logging.log4j.spi.AbstractLogger;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
index d6143cdc158..dd50987f257 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationSource.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.config;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -34,6 +33,7 @@
import java.nio.file.Path;
import java.util.Objects;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.net.UrlConnectionFactory;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.Loader;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index bf039a2dafc..43016cfbed9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.config.builder.impl;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
@@ -60,6 +59,7 @@
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ScriptComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ScriptFileComponentBuilder;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Integers;
import org.apache.logging.log4j.core.util.Throwables;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/package-info.java
index 32a69487d75..c7feac338f5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/package-info.java
@@ -20,7 +20,7 @@
* @since 2.4
*/
@Export
-@Version("2.25.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.config.builder.impl;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
index 6c81224c2d6..8b57df7fcd3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
@@ -18,7 +18,6 @@
import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -37,6 +36,7 @@
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.CronExpression;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Constants;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/package-info.java
index a4300945314..e7d16d7f33f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/package-info.java
@@ -20,7 +20,7 @@
* attributes in plugin factory methods.
*/
@Export
-@Version("2.24.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.config.plugins.convert;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java
index 53a32a99edf..810938c2eec 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.config.plugins.util;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -38,6 +37,7 @@
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Loader;
import org.apache.logging.log4j.status.StatusLogger;
import org.osgi.framework.FrameworkUtil;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java
index c2c42b8d5b7..e3956726151 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java
@@ -19,7 +19,7 @@
* Utility and manager classes for Log4j 2 plugins.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.logging.log4j.core.config.plugins.util;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
index 1a1c22835a7..31c43983e71 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.config.status;
-import edu.umd.cs.findbugs.annotations.Nullable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -30,6 +29,7 @@
import org.apache.logging.log4j.core.util.NetUtils;
import org.apache.logging.log4j.status.StatusConsoleListener;
import org.apache.logging.log4j.status.StatusLogger;
+import org.jspecify.annotations.Nullable;
/**
* Configuration for setting up the {@link StatusLogger} fallback listener.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/package-info.java
index 1e20784cf97..703f79aa003 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/package-info.java
@@ -19,7 +19,7 @@
* Configuration classes for the {@link org.apache.logging.log4j.status.StatusLogger} API.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.logging.log4j.core.config.status;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
index 6caeec59ae5..3218589bb1d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.config.xml;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -41,6 +40,7 @@
import org.apache.logging.log4j.core.config.Reconfigurable;
import org.apache.logging.log4j.core.config.plugins.util.PluginType;
import org.apache.logging.log4j.core.config.status.StatusConfiguration;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.core.util.Integers;
import org.apache.logging.log4j.core.util.Loader;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MutableThreadContextMapFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MutableThreadContextMapFilter.java
index 62ef3a596e0..cc1f2e6c029 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MutableThreadContextMapFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MutableThreadContextMapFilter.java
@@ -18,7 +18,6 @@
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
@@ -44,6 +43,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.filter.mutable.KeyValuePairConfig;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.AuthorizationProvider;
import org.apache.logging.log4j.core.util.KeyValuePair;
import org.apache.logging.log4j.core.util.internal.HttpInputStreamUtil;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/package-info.java
index bb45186e7ad..f02feaa580e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/package-info.java
@@ -22,7 +22,7 @@
* {@link org.apache.logging.log4j.core.Filter#ELEMENT_TYPE filter}.
*/
@Export
-@Version("2.25.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.filter;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/internal/annotation/SuppressFBWarnings.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..ffad5257322
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java
index e91cb4c3884..d8927d6737d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.jmx;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.ByteArrayInputStream;
@@ -44,6 +43,7 @@
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/package-info.java
index 480cc2c6b27..dd13c9482a2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/package-info.java
@@ -18,7 +18,7 @@
* Log4j 2 JMX support.
*/
@Export
-@Version("2.23.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.jmx;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 9889a6a7c2b..58e3560711c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -19,7 +19,6 @@
import static org.apache.logging.log4j.util.Chars.LF;
import static org.apache.logging.log4j.util.Chars.NUL;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -43,6 +42,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.layout.internal.ExcludeChecker;
import org.apache.logging.log4j.core.layout.internal.IncludeChecker;
import org.apache.logging.log4j.core.layout.internal.ListChecker;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
index 4debdfab722..b5f5cc9f622 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.layout;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.LineNumberReader;
@@ -37,6 +36,7 @@
import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.pattern.DatePatternConverter;
import org.apache.logging.log4j.core.util.Transform;
import org.apache.logging.log4j.util.Strings;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MainMapLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MainMapLookup.java
index 2ff23cc38f9..eda565875b0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MainMapLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MainMapLookup.java
@@ -16,10 +16,10 @@
*/
package org.apache.logging.log4j.core.lookup;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Map;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* A map-based lookup for main arguments.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
index 1aa2f5e18dd..cfd6a9003d3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.net;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;
@@ -26,6 +25,7 @@
import javax.naming.NamingException;
import org.apache.logging.log4j.core.appender.AbstractManager;
import org.apache.logging.log4j.core.appender.ManagerFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.JndiCloser;
import org.apache.logging.log4j.util.PropertiesUtil;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
index f44132df6df..72376d39650 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.net;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -41,6 +40,7 @@
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
index ac53c1b4a71..75d4306b688 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.net;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
@@ -34,6 +33,7 @@
import org.apache.logging.log4j.core.appender.AppenderLoggingException;
import org.apache.logging.log4j.core.appender.ManagerFactory;
import org.apache.logging.log4j.core.appender.OutputStreamManager;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Closer;
import org.apache.logging.log4j.core.util.Log4jThread;
import org.apache.logging.log4j.core.util.NullOutputStream;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
index fe57d821d96..68b933bfea7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
@@ -18,7 +18,6 @@
import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.JarURLConnection;
@@ -30,6 +29,7 @@
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.net.ssl.LaxHostnameVerifier;
import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
import org.apache.logging.log4j.core.net.ssl.SslConfigurationFactory;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/package-info.java
index 9a23c5b1374..089d4b3f261 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/package-info.java
@@ -25,7 +25,7 @@
*
*/
@Export
-@Version("2.20.3")
+@Version("2.26.0")
package org.apache.logging.log4j.core.net;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
index f2407a979b2..d264c5e570b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/FilePasswordProvider.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.net.ssl;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
@@ -26,6 +25,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* PasswordProvider that reads password from a file.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/LaxHostnameVerifier.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/LaxHostnameVerifier.java
index 0068619c70c..3e2ef8e253f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/LaxHostnameVerifier.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/LaxHostnameVerifier.java
@@ -16,9 +16,9 @@
*/
package org.apache.logging.log4j.core.net.ssl;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* An HostnameVerifier which accepts everything.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/package-info.java
index 7f7b26c2827..748173b9a3e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/ssl/package-info.java
@@ -18,7 +18,7 @@
* Log4j 2 SSL support
*/
@Export
-@Version("2.20.3")
+@Version("2.26.0")
package org.apache.logging.log4j.core.net.ssl;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/package-info.java
index 00552976b76..45bc926c52c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/package-info.java
@@ -18,7 +18,7 @@
* Implementation of Log4j 2.
*/
@Export
-@Version("2.24.2")
+@Version("2.26.0")
package org.apache.logging.log4j.core;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
index 8f55ab48cba..125cefbf408 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptFile.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.script;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -30,6 +29,7 @@
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.ExtensionLanguageMapping;
import org.apache.logging.log4j.core.util.FileUtils;
import org.apache.logging.log4j.core.util.IOUtils;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/Generate.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/Generate.java
index 873729a4bc5..81afa461dcd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/Generate.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/Generate.java
@@ -16,11 +16,11 @@
*/
package org.apache.logging.log4j.core.tools;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.util.Integers;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/package-info.java
index 8cbd2eb92fa..38f664c29c9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/package-info.java
@@ -18,7 +18,7 @@
* Log4j 2 command line tools.
*/
@Export
-@Version("2.20.1")
+@Version("2.26.0")
package org.apache.logging.log4j.core.tools;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
index 6c1dcbb9866..fb0b56bfce4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
@@ -22,7 +22,6 @@
import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.PrintStream;
import java.lang.annotation.ElementType;
@@ -70,6 +69,7 @@
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.regex.Pattern;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Ansi.IStyle;
import org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Ansi.Style;
import org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Ansi.Text;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
index 5eb467d0bed..74ac05e64a2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/FileUtils.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.util;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.net.URI;
@@ -34,6 +33,7 @@
import java.util.Objects;
import java.util.Set;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NameUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NameUtil.java
index c1f9c6d5a86..1c2b32d0d8d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NameUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NameUtil.java
@@ -16,11 +16,11 @@
*/
package org.apache.logging.log4j.core.util;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.util.Strings;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
index 22286c636d5..92a85a6fa19 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.core.util;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.net.InetAddress;
import java.net.MalformedURLException;
@@ -32,6 +31,7 @@
import java.util.List;
import java.util.function.Function;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
index 5a79ab8b9ab..e7f4757b21e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Source.java
@@ -18,7 +18,6 @@
import static java.util.Objects.requireNonNull;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -30,6 +29,7 @@
import java.util.Objects;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
import org.jspecify.annotations.NullMarked;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Throwables.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Throwables.java
index 7c97d495ba4..cf00631f9f8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Throwables.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Throwables.java
@@ -18,7 +18,6 @@
import static java.util.Objects.requireNonNull;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.LineNumberReader;
@@ -29,6 +28,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.logging.log4j.core.internal.annotation.SuppressFBWarnings;
/**
* Helps with Throwable objects.
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/package-info.java
index 932e8bc0800..b9efa51956b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/package-info.java
@@ -18,7 +18,7 @@
* Log4j 2 helper classes.
*/
@Export
-@Version("2.25.0")
+@Version("2.26.0")
package org.apache.logging.log4j.core.util;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/Log4jBridgeHandler.java b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/Log4jBridgeHandler.java
index efc3e563987..40a8a0d2f02 100644
--- a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/Log4jBridgeHandler.java
+++ b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/Log4jBridgeHandler.java
@@ -17,7 +17,6 @@
package org.apache.logging.log4j.jul;
// note: NO import of Logger, Level, LogManager to prevent conflicts JUL/log4j
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Enumeration;
@@ -28,6 +27,7 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.jul.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.log4j.status.StatusLogger;
diff --git a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/internal/annotation/SuppressFBWarnings.java b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..0fddf126cea
--- /dev/null
+++ b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.jul.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/package-info.java b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/package-info.java
index dd227473066..d7c5b41f89b 100644
--- a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/package-info.java
+++ b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/package-info.java
@@ -15,7 +15,7 @@
* limitations under the license.
*/
@Export
-@Version("2.20.2")
+@Version("2.26.0")
package org.apache.logging.log4j.jul;
import org.osgi.annotation.bundle.Export;
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/internal/annotation/SuppressFBWarnings.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..4328e28efc0
--- /dev/null
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.layout.template.json.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
index 957326d9ad6..d1c69d8788f 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
@@ -18,7 +18,6 @@
import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -33,6 +32,7 @@
import java.util.List;
import java.util.Objects;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.layout.template.json.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.LoaderUtil;
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/package-info.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/package-info.java
index dbb7814d27a..a806ff5105f 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/package-info.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/package-info.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
@Export
-@Version("2.22.0")
+@Version("2.26.0")
@Open("org.apache.logging.log4j.core")
package org.apache.logging.log4j.layout.template.json.util;
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index 6328ac4c9b0..dcb10255a46 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -132,8 +132,6 @@
1.1.2
4.14.0
3.6.0
-
- 4.8.6
2.7.18
5.3.39
2.0.3
@@ -163,7 +161,6 @@
$[bnd-module-name];access=0;modules="
biz.aQute.bnd.annotation,
com.google.errorprone.annotations,
- com.github.spotbugs.annotations,
org.osgi.annotation.bundle,
org.osgi.annotation.versioning
"
@@ -877,13 +874,6 @@
provided
-
- com.github.spotbugs
- spotbugs-annotations
- ${spotbugs-annotations.version}
- provided
-
-
@@ -1124,11 +1114,6 @@
org.osgi.annotation.versioning
${osgi.annotation.versioning.version}
-
- com.github.spotbugs
- spotbugs-annotations
- ${spotbugs-annotations.version}
-
diff --git a/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/internal/annotation/SuppressFBWarnings.java b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/internal/annotation/SuppressFBWarnings.java
new file mode 100644
index 00000000000..f139a9c8094
--- /dev/null
+++ b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/internal/annotation/SuppressFBWarnings.java
@@ -0,0 +1,31 @@
+/*
+ * 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.perf.internal.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation to suppress Spotbugs warnings.
+ */
+@Retention(RetentionPolicy.CLASS)
+public @interface SuppressFBWarnings {
+
+ String[] value() default {};
+
+ String justification() default "";
+}
diff --git a/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
index 83a4d45672b..baa44d234a6 100644
--- a/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
+++ b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.perf.jmh;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
@@ -29,6 +28,7 @@
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.util.Closer;
+import org.apache.logging.log4j.perf.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
diff --git a/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
index e58d7613b69..75c614588b0 100644
--- a/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
+++ b/log4j-perf-test/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.perf.jmh;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
@@ -29,6 +28,7 @@
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.util.Closer;
+import org.apache.logging.log4j.perf.internal.annotation.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
diff --git a/src/changelog/.2.x.x/3985_remove_spotbugs_annotations.xml b/src/changelog/.2.x.x/3985_remove_spotbugs_annotations.xml
new file mode 100644
index 00000000000..a2c7b3b8b20
--- /dev/null
+++ b/src/changelog/.2.x.x/3985_remove_spotbugs_annotations.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Remove the `com.github.spotbugs:spotbugs-annotations` dependency
+
+