[Git][java-team/gmbal-pfl][master] 11 commits: - d/p/03-java25-compatibility.patch: backport upstream patch

Tony Mancill (@tmancill) gitlab at salsa.debian.org
Thu Dec 18 14:40:30 GMT 2025



Tony Mancill pushed to branch master at Debian Java Maintainers / gmbal-pfl


Commits:
de554ffb by Vladimir Petko at 2025-12-17T11:48:33+13:00
    - d/p/03-java25-compatibility.patch: backport upstream patch
      to replace removed Unsafe methods.

- - - - -
b1f4cc76 by Vladimir Petko at 2025-12-17T11:48:44+13:00
    - d/p/04-java25-fix-tests.patch: backport upstream patch to
      fix BrigeTest failures due to the ReflectionFactory changes.

- - - - -
75e056a9 by Vladimir Petko at 2025-12-17T11:51:27+13:00
    - d/p/05-java25-allow-reflection.patch: add --add-opens test runner
      option to allow change of defineClass() visibility.

- - - - -
1b99cadc by Vladimir Petko at 2025-12-17T11:51:56+13:00
d/maven.properties: force utf8 encoding.

- - - - -
1ef74526 by Vladimir Petko at 2025-12-17T11:52:48+13:00
d/control: Update Standards-Version to 4.7.2, no change.

- - - - -
a7c72d50 by Vladimir Petko at 2025-12-17T11:53:11+13:00
d/p/series: update series.

- - - - -
cc03b1ba by Vladimir Petko at 2025-12-17T13:17:29+13:00
d/p/02-java11-compatibility.patch: drop patch, replaced by  d/p/03-java25-compatibility.patch

- - - - -
b3418908 by Vladimir Petko at 2025-12-17T13:17:30+13:00
d/control: use debhelper-compat 13

- - - - -
17c1c8cb by Vladimir Petko at 2025-12-17T13:17:31+13:00
d/rules: add newline

- - - - -
679f8c91 by Vladimir Petko at 2025-12-17T13:17:33+13:00
changelog

- - - - -
fbb3a7c0 by Tony Mancill at 2025-12-18T14:40:26+00:00
Merge branch 'master' into 'master'

Fix Java 25 ftbfs

See merge request java-team/gmbal-pfl!3
- - - - -


10 changed files:

- debian/changelog
- − debian/compat
- debian/control
- debian/maven.properties
- − debian/patches/02-java11-compatibility.patch
- + debian/patches/03-java25-compatibility.patch
- + debian/patches/04-java25-fix-tests.patch
- + debian/patches/05-java25-allow-reflection.patch
- debian/patches/series
- debian/rules


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,22 @@
+gmbal-pfl (4.0.1-b003-3) UNRELEASED; urgency=medium
+
+  * Resolve Java 25 ftbfs (Closes: #1108565):
+    - d/p/03-java25-compatibility.patch: Backport upstream patch
+      to replace removed Unsafe methods.
+    - d/p/04-java25-fix-tests.patch: Backport upstream patch to
+      fix BrigeTest failures due to the ReflectionFactory changes.
+    - d/p/05-java25-allow-reflection.patch: Add --add-opens test runner
+      option to allow change of defineClass() visibility.
+    - d/p/02-java11-compatibility.patch: Drop patch, replaced by
+      d/p/03-java25-compatibility.patch.
+  * d/control: Update Standards-Version to 4.7.2:
+    - d/control: Use debhelper-compat = 13.
+    - d/compat: Remove file.
+    - d/rules: Add newline.
+  * d/maven.properties: Force utf8 encoding.
+
+ -- Vladimir Petko <vladimir.petko at canonical.com>  Wed, 17 Dec 2025 11:40:35 +1300
+
 gmbal-pfl (4.0.1-b003-2) unstable; urgency=medium
 
   * Fixed the build failure with Java 11 (Closes: #909257)


=====================================
debian/compat deleted
=====================================
@@ -1 +0,0 @@
-11


=====================================
debian/control
=====================================
@@ -4,14 +4,14 @@ Priority: optional
 Maintainer: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
 Uploaders: Emmanuel Bourg <ebourg at apache.org>
 Build-Depends:
- debhelper (>= 11),
+ debhelper-compat (= 13),
  default-jdk,
  libgeronimo-ejb-3.2-spec-java,
  libmaven-antrun-plugin-java,
  libmaven-bundle-plugin-java,
  libmaven-source-plugin-java,
  maven-debian-helper (>= 2.1)
-Standards-Version: 4.2.1
+Standards-Version: 4.7.2
 Vcs-Git: https://salsa.debian.org/java-team/gmbal-pfl.git
 Vcs-Browser: https://salsa.debian.org/java-team/gmbal-pfl
 Homepage: https://javaee.github.io/gmbal-pfl/


=====================================
debian/maven.properties
=====================================
@@ -3,4 +3,5 @@
 # maven.test.skip=true
 # project.build.sourceEncoding=UTF-8
 
+project.build.sourceEncoding=UTF-8
 maven.test.failure.ignore=true


=====================================
debian/patches/02-java11-compatibility.patch deleted
=====================================
@@ -1,19 +0,0 @@
-Description: Fixes the compatibility with Java 11
-Author: Emmanuel Bourg <ebourg at apache.org>
-Forwarded: no
---- a/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/BridgeBase.java
-+++ b/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/BridgeBase.java
-@@ -264,7 +264,12 @@
-      * @param protectionDomain the domain in which the class should be defined
-      */
-     public final Class<?> defineClass(String className, byte[] classBytes, ClassLoader classLoader, ProtectionDomain protectionDomain) {
--        return unsafe.defineClass(className, classBytes, 0, classBytes.length, classLoader, null);
-+        try {
-+            Method defineClass = unsafe.getClass().getMethod("defineClass", new Class[]{String.class, byte[].class, int.class, int.class, ClassLoader.class, ProtectionDomain.class});
-+            return (Class) defineClass.invoke(unsafe, className, classBytes, 0, classBytes.length, classLoader, null);
-+        } catch (Exception e) {
-+            throw new RuntimeException(e.getMessage(), e);
-+        }
-     }
- 
-     /**


=====================================
debian/patches/03-java25-compatibility.patch
=====================================
@@ -0,0 +1,335 @@
+Description: Use replacement for Unsafe.ensureClassInitialized
+ Use java.lang.invoke.MethodHandles.Lookup instead of Unsafe to
+ work around removal of Unsafe.ensureClassInitialized in Java 25.
+Author: Russell Gold <russ at russgold.net>
+Origin: backport, https://github.com/eclipse-ee4j/orb-gmbal-pfl/commit/a591d952bc94f5f6fd7c4543296d496401e39956
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1108565
+Forwarded: not-needed
+Last-Update: 2025-12-16
+
+--- a/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/BridgeBase.java
++++ b/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/BridgeBase.java
+@@ -44,8 +44,10 @@
+
+ import java.io.OptionalDataException;
+ import java.lang.invoke.MethodHandle;
++import java.lang.invoke.MethodHandles;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
++import java.lang.reflect.InvocationTargetException;
+ import java.lang.reflect.Method;
+ import java.security.AccessController;
+ import java.security.PrivilegedAction;
+@@ -264,16 +266,45 @@
+      * @param protectionDomain the domain in which the class should be defined
+      */
+     public final Class<?> defineClass(String className, byte[] classBytes, ClassLoader classLoader, ProtectionDomain protectionDomain) {
+-        return unsafe.defineClass(className, classBytes, 0, classBytes.length, classLoader, null);
++        try {
++            return (Class<?>) getDefineClassMethod().invoke(classLoader, className, classBytes, 0, classBytes.length, null);
++        } catch (InvocationTargetException | IllegalAccessException exc) {
++            throw new Error("Could not access ClassLoader.defineClass()", exc);
++         }
++     }
++
++    private static Method defineClassMethod = null;
++    private static synchronized Method getDefineClassMethod() {
++        if (defineClassMethod != null) return defineClassMethod;
++
++        defineClassMethod = AccessController.doPrivileged(
++                (PrivilegedAction<Method>) () -> {
++                    try {
++                        Class<?> cl = Class.forName("java.lang.ClassLoader");
++                        Method defineClass = cl.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class, ProtectionDomain.class);
++                        defineClass.setAccessible(true);
++                        return defineClass;
++                    } catch (NoSuchMethodException | ClassNotFoundException exc) {
++                        throw new Error("Could not access ClassLoader.defineClass()", exc);
++                    }
++                }
++        );
++        return defineClassMethod;
++    }
++
++    private MethodHandles.Lookup getLookup(Class<?> anchorClass) throws IllegalAccessException {
++        return MethodHandles.privateLookupIn(anchorClass, MethodHandles.lookup())
++                            .dropLookupMode(MethodHandles.Lookup.PRIVATE);
++    }
++
++    public void ensureClassInitialized(Class<?> cl)  {
++        try {
++            getLookup(cl).ensureInitialized(cl);
++        } catch (IllegalAccessException e) {
++            e.printStackTrace();
++        }
+     }
+
+-    /**
+-     * Ensure that the class has been initialized.
+-     * @param cl the class to ensure is initialized
+-     */
+-    public final void ensureClassInitialized(Class<?> cl) {
+-        unsafe.ensureClassInitialized(cl);
+-    }
+
+     /**
+      * Obtain the latest user defined ClassLoader from the call stack.
+--- a/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/Bridge.java
++++ b/pfl-basic/src/main/java/org/glassfish/pfl/basic/reflection/Bridge.java
+@@ -51,6 +51,7 @@
+ import java.lang.invoke.MethodHandles;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
++import java.lang.reflect.Field;
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.security.AccessController;
+@@ -58,6 +59,8 @@
+ import java.security.PrivilegedAction;
+ import java.security.PrivilegedExceptionAction;
+ import java.util.Objects;
++import java.util.Optional;
++import java.util.stream.Stream;
+
+ /**
+  * This class provides the methods for fundamental JVM operations
+@@ -94,38 +97,56 @@
+     private static final Permission GET_BRIDGE_PERMISSION = new BridgePermission("getBridge");
+     private static Bridge bridge = null;
+
+-    // latestUserDefinedLoader() is a private static method
+-    // in ObjectInputStream in JDK 1.3 through 1.5.
+-    // We use reflection in a doPrivileged block to get a
+-    // Method reference and make it accessible.
+-    private final Method latestUserDefinedLoaderMethod;
+-
+-    // Since java.io.OptionalDataException's constructors are
+-    // package private, but we need to throw it in some special
+-    // cases, we try to do it by reflection.
+-    private final Constructor<OptionalDataException> optionalDataExceptionConstructor;
+-
+     private final ReflectionFactory reflectionFactory;
+
+-    private Method getLatestUserDefinedLoaderMethod() {
+-        return AccessController.doPrivileged(
+-                new PrivilegedAction<Method>() {
+-                    @SuppressWarnings("unchecked")
+-                    public Method run() {
+-                        Method result;
+-
+-                        try {
+-                            Class io = ObjectInputStream.class;
+-                            result = io.getDeclaredMethod("latestUserDefinedLoader");
+-                            result.setAccessible(true);
+-                        } catch (NoSuchMethodException nsme) {
+-                            throw new Error("java.io.ObjectInputStream latestUserDefinedLoader " + nsme, nsme);
+-                        }
++    private final StackWalker stackWalker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
+
+-                        return result;
+-                    }
+-                }
+-        );
++    // New implementation for Java 9, supplied by Alan Bateman
++    @Override
++    public final ClassLoader getLatestUserDefinedLoader() {
++        // requires getClassLoader permission => needs doPrivileged.
++        PrivilegedAction<ClassLoader> pa = () ->
++                stackWalker.walk(this::getLatestUserDefinedLoaderFrame)
++                        .map(sf -> sf.getDeclaringClass().getClassLoader())
++                        .orElseGet(ClassLoader::getPlatformClassLoader);
++        return AccessController.doPrivileged(pa);
++    }
++
++    private Optional<StackWalker.StackFrame> getLatestUserDefinedLoaderFrame(Stream<StackWalker.StackFrame> stream) {
++        return stream.filter(this::isUserLoader).findFirst();
++    }
++
++    private boolean isUserLoader(StackWalker.StackFrame sf) {
++        ClassLoader cl = sf.getDeclaringClass().getClassLoader();
++        if (cl == null) return false;
++
++        ClassLoader platformClassLoader = ClassLoader.getPlatformClassLoader();
++        while (platformClassLoader != null && cl != platformClassLoader) platformClassLoader = platformClassLoader.getParent();
++        return cl != platformClassLoader;
++    }
++
++    public final MethodHandle readObjectNoDataForSerialization(Class<?> cl) {
++        return reflectionFactory.readObjectNoDataForSerialization(cl);
++    }
++
++    @Override
++    public Field toAccessibleField(Field field, Class callingClass) {
++        return isClassOpenToModule(field.getDeclaringClass(), callingClass.getModule())
++              ? super.toAccessibleField(field, callingClass)
++              : null;
++    }
++
++    private boolean isClassOpenToModule(Class<?> candidateClass, Module callingModule) {
++        return callingModule.isNamed()
++              ? candidateClass.getModule().isOpen(candidateClass.getPackageName(), callingModule)
++              : candidateClass.getModule().isOpen(candidateClass.getPackageName());
++    }
++
++    @Override
++    public Method toAccessibleMethod(Method method, Class callingClass) {
++        return isClassOpenToModule(method.getDeclaringClass(), callingClass.getModule())
++              ? super.toAccessibleMethod(method, callingClass)
++              : null;
+     }
+
+     // Grab the OptionalDataException boolean ctor and make it accessible.
+@@ -157,9 +178,7 @@
+
+     @SuppressWarnings("unchecked")
+     private Bridge() {
+-        latestUserDefinedLoaderMethod = getLatestUserDefinedLoaderMethod();
+         reflectionFactory = ReflectionFactory.getReflectionFactory();
+-        optionalDataExceptionConstructor = getOptDataExceptionCtor();
+     }
+
+     /**
+@@ -176,11 +195,6 @@
+      *                           required permissions and the caller has a non-null security manager.
+      */
+     public static synchronized Bridge get() {
+-        SecurityManager sman = System.getSecurityManager();
+-        if (sman != null) {
+-            sman.checkPermission(GET_BRIDGE_PERMISSION);
+-        }
+-
+         if (bridge == null) {
+             bridge = new Bridge();
+         }
+@@ -188,25 +202,11 @@
+         return bridge;
+     }
+
+-    @Override
+-    public final ClassLoader getLatestUserDefinedLoader() {
+-        try {
+-            return (ClassLoader) latestUserDefinedLoaderMethod.invoke(null);
+-        } catch (InvocationTargetException | IllegalAccessException ite) {
+-            throw new Error(getClass().getName() + ".latestUserDefinedLoader: " + ite, ite);
+-        }
+-    }
+
+     @Override
+     @SuppressWarnings("unchecked")
+     public final <T> Constructor<T> newConstructorForExternalization(Class<T> cl) {
+-        try {
+-            Constructor<?> cons = cl.getDeclaredConstructor();
+-            cons.setAccessible(true);
+-            return isPublic(cons) ? (Constructor<T>) cons : null;
+-        } catch (NoSuchMethodException ex) {
+-            return null;
+-        }
++        return (Constructor<T>) reflectionFactory.newConstructorForExternalization( cl );
+     }
+
+     private static boolean isPublic(Constructor<?> cons) {
+@@ -216,26 +216,16 @@
+     @Override
+     @SuppressWarnings("unchecked")
+     public final <T> Constructor<T> newConstructorForSerialization(Class<T> aClass, Constructor<?> cons) {
+-        Constructor newConstructor = reflectionFactory.newConstructorForSerialization(aClass, cons);
+-        newConstructor.setAccessible(true);
+-        return (Constructor<T>) newConstructor;
++        return (Constructor<T>) reflectionFactory.newConstructorForSerialization(aClass, cons);
+     }
+
+-    @Override
++        @Override
++    @SuppressWarnings("unchecked")
+     public <T> Constructor<T> newConstructorForSerialization(Class<T> aClass) {
+-        Class<?> baseClass = getNearestNonSerializableBaseClass(aClass);
+-        if (baseClass == null) return null;
+-
+-        try {
+-            Constructor<?> cons = baseClass.getDeclaredConstructor();
+-            if (isPrivate(cons) || !isAccessibleFromSubclass(cons, aClass, baseClass)) return null;
+-
+-            return newConstructorForSerialization(aClass, cons);
+-        } catch (NoSuchMethodException ex) {
+-            return null;
+-        }
++        return (Constructor<T>) reflectionFactory.newConstructorForSerialization( aClass );
+     }
+
++
+     private static <T> Class<?> getNearestNonSerializableBaseClass(Class<T> clazz) {
+         Class<?> baseClass = clazz;
+
+@@ -263,15 +253,16 @@
+
+     private static Method hasStaticInitializerMethod = null;
+
++    /**
++     * Returns true if the given class defines a static initializer method,
++     * false otherwise.
++     */
+     @Override
+-    public boolean hasStaticInitializerForSerialization(Class<?> cl) {
+-        try {
+-            return (Boolean) getHasStaticInitializerMethod().invoke(null, cl);
+-        } catch (Exception ex) {
+-            throw new Error("Cannot invoke 'hasStaticInitializer' method on " + ObjectStreamClass.class.getName());
+-        }
++    public final boolean hasStaticInitializerForSerialization(Class<?> cl) {
++        return reflectionFactory.hasStaticInitializerForSerialization(cl);
+     }
+
++
+     private static Method getHasStaticInitializerMethod() throws NoSuchMethodException {
+         if (hasStaticInitializerMethod == null) {
+             hasStaticInitializerMethod = ObjectStreamClass.class.getDeclaredMethod("hasStaticInitializer", Class.class);
+@@ -282,8 +273,8 @@
+     }
+
+     @Override
+-    public MethodHandle writeObjectForSerialization(Class<?> cl) {
+-        return toMethodHandle(getPrivateMethod(cl, "writeObject", Void.TYPE, ObjectOutputStream.class));
++    public final MethodHandle writeObjectForSerialization(Class<?> cl) {
++        return reflectionFactory.writeObjectForSerialization(cl);
+     }
+
+     private static MethodHandle toMethodHandle(Method method) {
+@@ -315,13 +306,13 @@
+     }
+
+     @Override
+-    public MethodHandle readObjectForSerialization(Class<?> cl) {
+-        return toMethodHandle(getPrivateMethod(cl, "readObject", Void.TYPE, ObjectInputStream.class));
++    public final MethodHandle readObjectForSerialization(Class<?> cl) {
++        return reflectionFactory.readObjectForSerialization(cl);
+     }
+
+     @Override
+-    public MethodHandle readResolveForSerialization(Class<?> cl) {
+-        return toMethodHandle(getInheritableMethod(cl, "readResolve", Object.class));
++    public final MethodHandle readResolveForSerialization(Class<?> cl) {
++        return reflectionFactory.readResolveForSerialization(cl);
+     }
+
+     private static Method getInheritableMethod(Class<?> cl, String name, Class<?> returnType, Class<?>... argTypes ) {
+@@ -368,16 +359,12 @@
+     }
+
+     @Override
+-    public MethodHandle writeReplaceForSerialization(Class<?> cl) {
+-        return toMethodHandle(getInheritableMethod(cl, "writeReplace", Object.class));
++    public final MethodHandle writeReplaceForSerialization(Class<?> cl) {
++        return reflectionFactory.writeReplaceForSerialization(cl);
+     }
+
+     @Override
+-    public OptionalDataException newOptionalDataExceptionForSerialization(boolean endOfData) {
+-        try {
+-            return optionalDataExceptionConstructor.newInstance(endOfData);
+-        } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
+-            throw new Error("Unable to create OptionalDataException");
+-        }
++    public final OptionalDataException newOptionalDataExceptionForSerialization(boolean bool) {
++        return reflectionFactory.newOptionalDataExceptionForSerialization(bool);
+     }
+ }


=====================================
debian/patches/04-java25-fix-tests.patch
=====================================
@@ -0,0 +1,62 @@
+Description: update tests for Java 25
+ This is a backport of commit d73d7d15ad4b6a5a631681dbc2d083f8033c0aac
+ that enabled testing of multi-release jar files.
+ ReflectionFactory checks that the class implements Serializable in
+ Java 25.
+Author: Russell Gold <russell.gold at oracle.com>
+Origin: backport, https://github.com/eclipse-ee4j/orb-gmbal-pfl/commit/d73d7d15ad4b6a5a631681dbc2d083f8033c0aac
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1108565
+Forwarded: not-needed
+Last-Update: 2025-12-16
+
+--- a/pfl-basic/src/test/java/org/glassfish/pfl/basic/reflection/BridgeTest.java
++++ b/pfl-basic/src/test/java/org/glassfish/pfl/basic/reflection/BridgeTest.java
+@@ -55,6 +55,7 @@
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.OptionalDataException;
++import java.io.Serializable;
+ import java.lang.invoke.MethodHandle;
+ import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+@@ -380,25 +374,25 @@
+     }
+
+     @SuppressWarnings("unused")
+-    private static class ClassWithPublicResolveAndReplace {
++    private static class ClassWithPublicResolveAndReplace implements Serializable{
+         public Object readResolve() { return null; }
+         public Object writeReplace() { return null; }
+     }
+
+     @SuppressWarnings("unused")
+-    private static class ClassWithPackagePrivateResolveAndReplace {
++    private static class ClassWithPackagePrivateResolveAndReplace implements Serializable {
+         Object readResolve() { return null; }
+         Object writeReplace() { return null; }
+     }
+
+     @SuppressWarnings("unused")
+-    private static class ClassWithProtectedResolveAndReplace {
++    private static class ClassWithProtectedResolveAndReplace implements Serializable {
+         protected Object readResolve() { return null; }
+         protected Object writeReplace() { return null; }
+     }
+
+     @SuppressWarnings("unused")
+-    private static class ClassWithPrivateResolveAndReplace {
++    private static class ClassWithPrivateResolveAndReplace implements Serializable {
+         private Object readResolve() { return null; }
+         private Object writeReplace() { return null; }
+     }
+--- a/pfl-basic/src/test/java/org/glassfish/pfl/basic/testobjects/ForeignClassWithPackagePrivateResolveAndReplace.java
++++ b/pfl-basic/src/test/java/org/glassfish/pfl/basic/testobjects/ForeignClassWithPackagePrivateResolveAndReplace.java
+@@ -41,7 +41,7 @@
+ package org.glassfish.pfl.basic.testobjects;
+
+ @SuppressWarnings("unused")
+-public class ForeignClassWithPackagePrivateResolveAndReplace {
++public class ForeignClassWithPackagePrivateResolveAndReplace implements java.io.Serializable {
+     Object readResolve() { return null; }
+     Object writeReplace() { return null; }
+ }


=====================================
debian/patches/05-java25-allow-reflection.patch
=====================================
@@ -0,0 +1,29 @@
+Description: add --add-opens to make defineClass() accessible
+ BridgeBase uses reflection to access defineClass() method.
+ This requires --add-opens argument to make the method
+ accessible.
+Author: Vladimir Petko <vladimir.petko at canonical.com>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1108565
+Forwarded: not-needed
+Last-Update: 2025-12-16
+
+
+--- a/pfl-dynamic/pom.xml
++++ b/pfl-dynamic/pom.xml
+@@ -73,6 +73,16 @@
+     <build>
+         <plugins>
+             <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-surefire-plugin</artifactId>
++                <version>debian</version>
++                <configuration>
++                    <argLine>
++                        --add-opens java.base/java.lang=ALL-UNNAMED
++                    </argLine>
++                </configuration>
++            </plugin>
++            <plugin>
+                 <groupId>org.apache.felix</groupId>
+                 <artifactId>maven-bundle-plugin</artifactId>
+                 <version>2.3.7</version>


=====================================
debian/patches/series
=====================================
@@ -1,3 +1,4 @@
 01-jar-packaging.patch
-02-java11-compatibility.patch
-
+03-java25-compatibility.patch
+04-java25-fix-tests.patch
+05-java25-allow-reflection.patch


=====================================
debian/rules
=====================================
@@ -1,4 +1,4 @@
 #!/usr/bin/make -f
 
 %:
-	dh $@ --buildsystem=maven
\ No newline at end of file
+	dh $@ --buildsystem=maven



View it on GitLab: https://salsa.debian.org/java-team/gmbal-pfl/-/compare/7c5a50c811bea6d0303fe7565824967e171e60a5...fbb3a7c0b4c9154b4c24c67700a4d737119f1c19

-- 
View it on GitLab: https://salsa.debian.org/java-team/gmbal-pfl/-/compare/7c5a50c811bea6d0303fe7565824967e171e60a5...fbb3a7c0b4c9154b4c24c67700a4d737119f1c19
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20251218/a13e9498/attachment.htm>


More information about the pkg-java-commits mailing list