[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