From a1949bf612019f36663b6498a8c91e71572e59e4 Mon Sep 17 00:00:00 2001
From: zzz <zzz@i2pmail.org>
Date: Thu, 28 Nov 2024 10:50:26 -0500
Subject: [PATCH] Build: Suppress JNI warnings from Java 24 for CLI and
 i2psnark-standalone

and add note to wrapper.config on how to do it there for normal runtime
---
 apps/i2psnark/java/build.xml       | 5 +++++
 core/java/build.xml                | 7 +++++++
 installer/resources/wrapper.config | 7 +++++++
 router/java/build.xml              | 7 +++++++
 4 files changed, 26 insertions(+)

diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml
index 3346039adf..339f440cdd 100644
--- a/apps/i2psnark/java/build.xml
+++ b/apps/i2psnark/java/build.xml
@@ -261,6 +261,11 @@
             <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
             <attribute name="X-Compile-Source-JDK" value="${javac.version}" />
             <attribute name="X-Compile-Target-JDK" value="${javac.version}" />
+            <!--
+               Suppress JNI warning in JRE 24+, and eventual restriction
+               See https://openjdk.org/jeps/472
+             -->
+            <attribute name="Enable-Native-Access" value="ALL-UNNAMED" />
             <!-- this is so Jetty will report its version correctly -->
             <section name="org/eclipse/jetty/server/" >
                 <attribute name="Implementation-Vendor" value="Eclipse.org - Jetty" />
diff --git a/core/java/build.xml b/core/java/build.xml
index 8b36ce5f0b..f934f4ee4e 100644
--- a/core/java/build.xml
+++ b/core/java/build.xml
@@ -129,6 +129,13 @@
                 <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
                 <attribute name="X-Compile-Source-JDK" value="${javac.version}" />
                 <attribute name="X-Compile-Target-JDK" value="${javac.version}" />
+                <!--
+                   Suppress JNI warning in JRE 24+, and eventual restriction
+                   See https://openjdk.org/jeps/472
+                   This only works for CLI with this as the named -jar argument;
+                   for normal runtime it must be suppressed in wrapper.config
+                 -->
+                <attribute name="Enable-Native-Access" value="ALL-UNNAMED" />
             </manifest>
         </jar>
     </target>
diff --git a/installer/resources/wrapper.config b/installer/resources/wrapper.config
index 3e353cfa48..e3a7188206 100644
--- a/installer/resources/wrapper.config
+++ b/installer/resources/wrapper.config
@@ -77,6 +77,13 @@ wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
 wrapper.java.additional.2=-Di2p.dir.base="$INSTALL_PATH"
 wrapper.java.additional.2.stripquotes=TRUE
 
+# Suppress JNI warning in JRE 24+, and eventual restriction
+# See https://openjdk.org/jeps/472
+# This will fail on JRE 11 or lower, works on JRE 17+
+#wrapper.java.additional.3=--enable-native-access=ALL-UNNAMED
+# Alternative that _may_ work on all JRE versions:
+#set.JDK_JAVA_OPTIONS=--enable-native-access=ALL-UNNAMED
+
 # Prevent the JVM from exporting stats (and thereby causing hundreds of
 # ms long pauses during GC)
 # http://www.evanjones.ca/jvm-mmap-pause.html
diff --git a/router/java/build.xml b/router/java/build.xml
index 4b0cedf2bc..2286b72cb3 100644
--- a/router/java/build.xml
+++ b/router/java/build.xml
@@ -99,6 +99,13 @@
                 <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
                 <attribute name="X-Compile-Source-JDK" value="${javac.version}" />
                 <attribute name="X-Compile-Target-JDK" value="${javac.version}" />
+                <!--
+                   Suppress JNI warning in JRE 24+, and eventual restriction
+                   See https://openjdk.org/jeps/472
+                   This only works for CLI with this as the named -jar argument;
+                   for normal runtime it must be suppressed in wrapper.config
+                 -->
+                <attribute name="Enable-Native-Access" value="ALL-UNNAMED" />
             </manifest>
         </jar>
     </target>
-- 
GitLab