You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2025/06/21 18:51:37 UTC

(jackrabbit-filevault) branch master updated: JCRVLT-764 Require Java 11

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d32267b JCRVLT-764 Require Java 11
4d32267b is described below

commit 4d32267b958badc7ad728c98dcbd86a565f5256d
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Jan 7 17:30:03 2025 +0100

    JCRVLT-764 Require Java 11
    
    JCRVLT-790 Update embedded Oak/JR2 dependencies to 1.72.0/2.22.0
    Update jacoco-m-p to 0.8.13
    Update Mockito to 5.15.2
    Adjust test case
    Increase version to 4.0.0-SNAPSHOT
---
 parent/pom.xml                                     | 10 +++---
 .../min-target-osgi-environment/min-target.bndrun  |  2 +-
 vault-core-it/vault-core-integration-tests/pom.xml |  2 +-
 .../packaging/impl/JcrPackageManagerImplIT.java    |  2 +-
 .../vault/packaging/integration/ACEsAtRootIT.java  | 26 ++++++++++------
 vault-core/pom.xml                                 |  2 +-
 .../jackrabbit/vault/fs/config/ConfigHelper.java   | 36 +++++++++-------------
 .../jackrabbit/vault/fs/config/Registry.java       |  4 +--
 .../packaging/impl/InstallHookProcessorImpl.java   |  2 +-
 .../impl/ExecutionPlanBuilderImplTest.java         |  3 +-
 vault-rcp/pom.xml                                  | 13 ++++++++
 11 files changed, 58 insertions(+), 44 deletions(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 2ffacd7f..f5e2b6b7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -48,7 +48,7 @@ Apache Jackrabbit FileVault is a project of the Apache Software Foundation.
 
     <properties>
         <!-- CI-friendly version, https://maven.apache.org/maven-ci-friendly.html -->
-        <revision>3.8.5-SNAPSHOT</revision>
+        <revision>4.0.0-SNAPSHOT</revision>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <!-- for dependencies used for calculating OSGi import-package version ranges the minimally supported version should be used to be backwards compatible in OSGi containers -->
         <jackrabbit.min.version>2.20.8</jackrabbit.min.version>
@@ -57,14 +57,14 @@ Apache Jackrabbit FileVault is a project of the Apache Software Foundation.
         <!-- for dependencies used for calculating OSGi import-package version ranges the minimally supported version should be used to be backwards compatible in OSGi containers -->
         <oak.min.version>1.22.4</oak.min.version>
         <!-- for embedded dependencies the newest version should be used -->
-        <oak.max.version>1.52.0</oak.max.version>
+        <oak.max.version>1.72.0</oak.max.version>
         <slf4j.version>1.7.25</slf4j.version>
         <commons-io.version>2.7</commons-io.version>
         <test.oak>true</test.oak> <!-- passed to integration test as property "oak", set to true to test with Oak, false means test with Jackrabbit 2 -->
         <bnd.version>6.4.0</bnd.version>
         <minimalMavenBuildVersion>3.6.1</minimalMavenBuildVersion><!-- due to https://issues.apache.org/jira/browse/MNG-6059 -->
         <minimalJavaBuildVersion>11</minimalJavaBuildVersion>
-        <maven.compiler.release>8</maven.compiler.release>
+        <maven.compiler.release>11</maven.compiler.release>
         <sling.url>http://localhost:4502</sling.url>
         <jacoco.command /><!-- is overwritten by https://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html -->
         <project.build.outputTimestamp>2025-03-25T09:33:00Z</project.build.outputTimestamp>
@@ -261,7 +261,7 @@ Bundle-Category: jackrabbit
                 <plugin>
                     <groupId>org.jacoco</groupId>
                     <artifactId>jacoco-maven-plugin</artifactId>
-                    <version>0.8.10</version>
+                    <version>0.8.13</version>
                 </plugin>
                 <plugin>
                     <groupId>org.owasp</groupId>
@@ -344,7 +344,7 @@ Bundle-Category: jackrabbit
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>flatten-maven-plugin</artifactId>
-                <version>1.5.0</version>
+                <version>1.7.1</version>
                 <configuration>
                     <updatePomFile>true</updatePomFile>
                     <flattenMode>resolveCiFriendliesOnly</flattenMode>
diff --git a/target-osgi-environment/min-target-osgi-environment/min-target.bndrun b/target-osgi-environment/min-target-osgi-environment/min-target.bndrun
index fd4b33d9..5a03fc29 100644
--- a/target-osgi-environment/min-target-osgi-environment/min-target.bndrun
+++ b/target-osgi-environment/min-target-osgi-environment/min-target.bndrun
@@ -16,7 +16,7 @@
 -standalone: ${fileuri;${.}/target/index.xml}
 
 -runfw: org.apache.felix.framework
--runee: JavaSE-1.8
+-runee: JavaSE-11
 
 -resolve.effective: active
 # workaround for https://issues.apache.org/jira/browse/SLING-7608 and https://issues.apache.org/jira/browse/SLING-7604
diff --git a/vault-core-it/vault-core-integration-tests/pom.xml b/vault-core-it/vault-core-integration-tests/pom.xml
index c517726c..e04da5a8 100644
--- a/vault-core-it/vault-core-integration-tests/pom.xml
+++ b/vault-core-it/vault-core-integration-tests/pom.xml
@@ -144,7 +144,7 @@
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>3.9.0</version>
+            <version>5.15.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
diff --git a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplIT.java b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplIT.java
index 0e9fda97..e17ca398 100644
--- a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplIT.java
+++ b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImplIT.java
@@ -49,7 +49,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
diff --git a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/ACEsAtRootIT.java b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/ACEsAtRootIT.java
index af4607ef..44315b6a 100644
--- a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/ACEsAtRootIT.java
+++ b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/ACEsAtRootIT.java
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.vault.packaging.integration;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -28,17 +30,17 @@ import java.util.zip.Deflater;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.jcr.security.AccessControlEntry;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
-import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
-import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
@@ -48,11 +50,8 @@ import org.apache.jackrabbit.vault.packaging.ExportOptions;
 import org.apache.jackrabbit.vault.packaging.PackageException;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
-import org.junit.Ignore;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-
 public class ACEsAtRootIT extends IntegrationTestBase {
 
     @Test
@@ -82,8 +81,8 @@ public class ACEsAtRootIT extends IntegrationTestBase {
         AccessControlUtils.addAccessControlEntry(admin, "/", principal1, new String[]{"jcr:read"}, true);
 
         // Check the number of ACEs at the root
-
-        assertEquals(2, AccessControlUtils.getAccessControlList(admin, "/").getAccessControlEntries().length);
+        AccessControlEntry[] originalAces = AccessControlUtils.getAccessControlList(admin, "/").getAccessControlEntries();
+        assertEquals(2, originalAces.length);
         assertEquals(1, AccessControlUtils.getAccessControlList(admin, null).getAccessControlEntries().length);
 
         // Export with the user session
@@ -130,7 +129,6 @@ public class ACEsAtRootIT extends IntegrationTestBase {
 
         // Import with admin session
 
-        clean(userPath);
 
         ImportOptions importOptions = new ImportOptions();
 //        importOptions.setImportMode(ImportMode.UPDATE);
@@ -154,12 +152,22 @@ public class ACEsAtRootIT extends IntegrationTestBase {
         // Check the number of ACEs at the root, the count should not have changed.
 
         assertNodeExists(userPath);
-        assertEquals(2, AccessControlUtils.getAccessControlList(admin, "/").getAccessControlEntries().length);
+        AccessControlEntry[] actualAces = AccessControlUtils.getAccessControlList(admin, "/").getAccessControlEntries();
+        assertEquals("Expected two ACEs: " + toString(originalAces) + " at / but found: " + toString(actualAces), 2, actualAces.length);
         assertEquals(1, AccessControlUtils.getAccessControlList(admin, null).getAccessControlEntries().length);
 
+        // removing the user's node also removes the bound ACEs at the root in later Oak versions
+        clean(userPath);
         tmpFile.delete();
 
     }
 
+    static String toString(AccessControlEntry[] aces) {
+        StringBuilder sb = new StringBuilder();
+        for (AccessControlEntry ace : aces) {
+            sb.append("ACE for principal ").append(ace.getPrincipal().getName()).append(" with privileges ").append(StringUtils.join(ace.getPrivileges(), ",")).append("\n");
+        }
+        return sb.toString();
+    }
 }
 
diff --git a/vault-core/pom.xml b/vault-core/pom.xml
index 1a94b472..5b753649 100644
--- a/vault-core/pom.xml
+++ b/vault-core/pom.xml
@@ -309,7 +309,7 @@
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>3.9.0</version>
+            <version>5.15.2</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/ConfigHelper.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/ConfigHelper.java
index b57719c1..69a284e6 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/ConfigHelper.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/ConfigHelper.java
@@ -37,17 +37,17 @@ public class ConfigHelper {
      */
     private static final Logger log = LoggerFactory.getLogger(ConfigHelper.class);
 
-    private Map defaultPackages = new HashMap();
+    private Map<String, String> defaultPackages = new HashMap<>();
 
-    private Map defaultClasses = new HashMap();
+    private Map<String, String> defaultClasses = new HashMap<>();
 
-    private Map<String, String> mappings = new HashMap<String, String>();
+    private Map<String, String> mappings = new HashMap<>();
 
-    public Map getDefaultPackages() {
+    public Map<String, String> getDefaultPackages() {
         return defaultPackages;
     }
 
-    public Map getDefaultClasses() {
+    public Map<String, String> getDefaultClasses() {
         return defaultClasses;
     }
 
@@ -56,11 +56,11 @@ public class ConfigHelper {
     }
 
     public String getDefaultPackage(String name) {
-        return (String) defaultPackages.get(name);
+        return defaultPackages.get(name);
     }
 
     public String getDefaultClass(String name) {
-        return (String) defaultClasses.get(name);
+        return defaultClasses.get(name);
     }
 
     public Object create(Element elem)
@@ -68,7 +68,7 @@ public class ConfigHelper {
 
         String className = elem.getAttribute("class");
         if (className == null || className.equals("")) {
-            className = (String) defaultClasses.get(elem.getNodeName());
+            className = defaultClasses.get(elem.getNodeName());
         }
         if (className == null || className.equals("")) {
             // create string object
@@ -82,7 +82,7 @@ public class ConfigHelper {
         }
 
         // try to get class without prepending package
-        Class clazz = null;
+        Class<?> clazz = null;
         try {
             clazz = getClass().getClassLoader().loadClass(className);
         } catch (ClassNotFoundException e) {
@@ -91,7 +91,7 @@ public class ConfigHelper {
         if (clazz == null) {
             // check for default package
             if (className.indexOf('.') < 0) {
-                String pack = (String) defaultPackages.get(elem.getNodeName());
+                String pack = defaultPackages.get(elem.getNodeName());
                 if (pack == null) {
                     throw new ConfigurationException("Default package for class attribute of " + elem.getNodeName() + " missing.");
                 }
@@ -112,15 +112,11 @@ public class ConfigHelper {
         }
         try {
             if (field == null) {
-                return clazz.newInstance();
+                return clazz.getDeclaredConstructor().newInstance();
             } else {
                 return clazz.getField(field).get(null);
             }
-        } catch (InstantiationException e) {
-            throw new ConfigurationException("Error while creating instance for " + elem.getNodeName(), e);
-        } catch (NoSuchFieldException e) {
-            throw new ConfigurationException("Error while creating instance for " + elem.getNodeName(), e);
-        } catch (IllegalAccessException e) {
+        } catch (InstantiationException|IllegalAccessException|NoSuchFieldException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
             throw new ConfigurationException("Error while creating instance for " + elem.getNodeName(), e);
         }
     }
@@ -129,11 +125,11 @@ public class ConfigHelper {
         return prefix + name.substring(0, 1).toUpperCase(Locale.ROOT) + name.substring(1);
     }
 
-    public static Method getMethod(Object obj, String name, Class ... params) {
+    public static Method getMethod(Object obj, String name, Class<?> ... params) {
         Method[] ms = obj.getClass().getMethods();
         for (Method m : ms) {
             if (m.getName().equals(name)) {
-                Class[] pt = m.getParameterTypes();
+                Class<?>[] pt = m.getParameterTypes();
                 if (pt.length == params.length) {
                     for (int j = 0; j < params.length; j++) {
                         if (!params[j].isAssignableFrom(pt[j])) {
@@ -199,9 +195,7 @@ public class ConfigHelper {
         } catch (NoSuchMethodException e) {
             log.trace("{} has no field {} or type " + T, obj, name);
             return null;
-        } catch (IllegalAccessException e) {
-            throw new ConfigurationException("Unable to get list " + name + " of " + obj);
-        } catch (InvocationTargetException e) {
+        } catch (IllegalAccessException|InvocationTargetException e) {
             throw new ConfigurationException("Unable to get list " + name + " of " + obj);
         }
     }
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/Registry.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/Registry.java
index ff1b52c5..0b84570e 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/Registry.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/Registry.java
@@ -76,7 +76,7 @@ public class Registry {
     public Aggregator createAggregator(String type) {
         if (aggregators.containsKey(type)) {
             try {
-                return aggregators.get(type).newInstance();
+                return aggregators.get(type).getDeclaredConstructor().newInstance();
             } catch (Exception e) {
                 throw new IllegalArgumentException("Unable to create aggregator of type: " + type, e);
             }
@@ -87,7 +87,7 @@ public class Registry {
     public ArtifactHandler createHandler(String type) {
         if (handlers.containsKey(type)) {
             try {
-                return handlers.get(type).newInstance();
+                return handlers.get(type).getDeclaredConstructor().newInstance();
             } catch (Exception e) {
                 throw new IllegalArgumentException("Unable to create handler of type: " + type, e);
             }
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
index bac0b65d..f48d4fc9 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
@@ -276,7 +276,7 @@ public class InstallHookProcessorImpl implements InstallHookProcessor {
             }
             // create instance
             try {
-                hook = (InstallHook) clazz.newInstance();
+                hook = (InstallHook) clazz.getDeclaredConstructor().newInstance();
             } catch (Exception e) {
                 throw new PackageException("hook's main class " + mainClassName + " could not be instantiated.", e);
             }
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/ExecutionPlanBuilderImplTest.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/ExecutionPlanBuilderImplTest.java
index ea63d144..cd4f72e3 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/ExecutionPlanBuilderImplTest.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/ExecutionPlanBuilderImplTest.java
@@ -38,9 +38,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
 
-@RunWith(MockitoJUnitRunner.class)
+@RunWith(org.mockito.junit.MockitoJUnitRunner.class)
 public class ExecutionPlanBuilderImplTest {
 
     private ExecutionPlanBuilderImpl builder;
diff --git a/vault-rcp/pom.xml b/vault-rcp/pom.xml
index 067011ad..bbda8f64 100644
--- a/vault-rcp/pom.xml
+++ b/vault-rcp/pom.xml
@@ -114,6 +114,19 @@
                     </excludes>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>de.thetaphi</groupId>
+                <artifactId>forbiddenapis</artifactId>
+                <configuration>
+                    <excludes>
+                        <!-- excluded embedded 3rd party libraries -->
+                        <exclude>org/apache/jackrabbit/jcr2spi/**/*.class</exclude>
+                        <exclude>org/apache/jackrabbit/spi2dav/**/*.class</exclude>
+                        <exclude>org/apache/felix/utils/json/**/*.class</exclude>
+                        <exclude>org/apache/jackrabbit/client/**/*.class</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
         </plugins>
     </build>