diff --git a/antlr-maven-plugin.changes b/antlr-maven-plugin.changes
index fc4212c..8b845a1 100644
--- a/antlr-maven-plugin.changes
+++ b/antlr-maven-plugin.changes
@@ -1,3 +1,11 @@
+-------------------------------------------------------------------
+Thu Oct 26 12:08:10 UTC 2023 - Fridrich Strba <fstrba@suse.com>
+
+- Added patch:
+  * jdk18plus.patch
+    + catch UnsupportedOperationException that SecurityManager in
+      JDK 21 throws instead of warning about deprecation
+
 -------------------------------------------------------------------
 Mon Sep 25 09:21:04 UTC 2023 - Fridrich Strba <fstrba@suse.com>
 
diff --git a/antlr-maven-plugin.spec b/antlr-maven-plugin.spec
index b0ab844..755af9b 100644
--- a/antlr-maven-plugin.spec
+++ b/antlr-maven-plugin.spec
@@ -31,6 +31,7 @@ Patch2:         maven-antlr-plugin-2.1-sinkfix.patch
 # Fix grammar processing bug (bz 1020312)
 Patch3:         0001-MANTLR-34-Fix-NPE-when-building-Jenkins.patch
 Patch4:         new-reporting-api.patch
+Patch5:         jdk18plus.patch
 BuildRequires:  fdupes
 BuildRequires:  java-devel >= 1.8
 BuildRequires:  maven-local
@@ -66,6 +67,7 @@ This package contains the API documentation for %{name}.
 %patch2 -b .sink
 %patch3 -p1 -b .fixnpe
 %patch4 -p1
+%patch5 -p1
 
 %pom_change_dep :maven-project :maven-core:3.9.3
 
diff --git a/jdk18plus.patch b/jdk18plus.patch
new file mode 100644
index 0000000..92dcaf4
--- /dev/null
+++ b/jdk18plus.patch
@@ -0,0 +1,13 @@
+--- antlr-maven-plugin-2.2/src/main/java/org/codehaus/mojo/antlr/AbstractAntlrMojo.java	2010-11-16 16:59:34.000000000 +0100
++++ antlr-maven-plugin-2.2/src/main/java/org/codehaus/mojo/antlr/AbstractAntlrMojo.java	2023-10-26 14:01:46.596367163 +0200
+@@ -348,6 +348,10 @@
+                                + "Antlr's call to System.exit() can cause application shutdown "
+                                + "if not handled by the current SecurityManager." );
+         }
++        catch ( UnsupportedOperationException exc )
++        {
++            getLog().warn( exc );
++        }
+ 
+         String originalUserDir = null;
+         if ( plan.getImportVocabTokenTypesDirectory() != null )