diff --git a/jackrabbit-jcr-server-jakarta/pom.xml b/jackrabbit-jcr-server-jakarta/pom.xml
index a8144bdce..d6b44aed6 100644
--- a/jackrabbit-jcr-server-jakarta/pom.xml
+++ b/jackrabbit-jcr-server-jakarta/pom.xml
@@ -96,6 +96,15 @@
       <artifactId>jackrabbit-webdav-jakarta</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-fileupload2-jakarta</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tika</groupId>
+      <artifactId>tika-core</artifactId>
+      <version>${tika.jakarta.version}</version>
+    </dependency>
     <dependency>
       <groupId>jakarta.servlet</groupId>
       <artifactId>jakarta.servlet-api</artifactId>
diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml
index 2233ab9ee..9373c2e80 100644
--- a/jackrabbit-parent/pom.xml
+++ b/jackrabbit-parent/pom.xml
@@ -51,7 +51,10 @@
     <!-- OAK version used in componenents that *use* oak-jackrabbit-api -->
     <oak-jackrabbit-api.version.used>1.22.14</oak-jackrabbit-api.version.used>
     <jetty.version>9.2.30.v20200428</jetty.version>
-    <tika.version>2.7.0</tika.version>
+    <tika.version>2.9.0</tika.version>
+    <tika.jakarta.version>3.0.0-SNAPSHOT</tika.jakarta.version>
+    <commons-fileupload.version>1.5</commons-fileupload.version>
+    <commons-fileupload2.version>2.0.0-M1</commons-fileupload2.version>
     <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
     <slf4j.api.version>1.7.36</slf4j.api.version>
     <slf4j.version>1.7.36</slf4j.version> <!-- sync with logback version -->
@@ -605,7 +608,12 @@
       <dependency>
         <groupId>commons-fileupload</groupId>
         <artifactId>commons-fileupload</artifactId>
-        <version>1.5</version>
+        <version>${commons-fileupload.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-fileupload2-jakarta</artifactId>
+        <version>${commons-fileupload2.version}</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
diff --git a/jackrabbit-webapp-jakarta/assembly.xml b/jackrabbit-webapp-jakarta/assembly.xml
new file mode 100644
index 000000000..46f5de251
--- /dev/null
+++ b/jackrabbit-webapp-jakarta/assembly.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  -->
+<assembly>
+  <id>war</id>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <formats>
+    <format>war</format>
+  </formats>
+  <fileSets>
+    <fileSet>
+      <directory>${project.build.directory}/${project.build.finalName}</directory>
+      <outputDirectory></outputDirectory>
+    </fileSet>
+  </fileSets>
+</assembly>
diff --git a/jackrabbit-webapp-jakarta/pom.xml b/jackrabbit-webapp-jakarta/pom.xml
index 0a85da68d..798f8e6e1 100644
--- a/jackrabbit-webapp-jakarta/pom.xml
+++ b/jackrabbit-webapp-jakarta/pom.xml
@@ -30,11 +30,50 @@
   </properties>
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>get-webapp</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/webapp</outputDirectory>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.jackrabbit</groupId>
+                  <artifactId>jackrabbit-webapp</artifactId>
+                  <version>${project.version}</version>
+                  <type>war</type>
+                </artifactItem>
+              </artifactItems>
+              <excludes>**/jackrabbit-jcr-server*, **/jackrabbit-jcr-servlet*, **/jackrabbit-webdav*,
+                    **/jaxb-runtime*, **/tika*, **/bcmail*, **/bcprov*, **/bcpkix*, **/bcutil*</excludes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <artifactId>maven-war-plugin</artifactId>
-        <configuration>
-          <skip>true</skip>
-        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>exploded</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>default-war</id>
+            <goals>
+              <goal>war</goal>
+            </goals>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
       <plugin>
         <groupId>org.eclipse.transformer</groupId>
@@ -48,16 +87,50 @@
         </configuration>
         <executions>
           <execution>
-            <id>default-war</id>
+            <id>transform-war</id>
+            <phase>package</phase>
+            <goals>
+              <goal>transform</goal>
+            </goals>
+            <configuration>
+              <transformDirectory>${project.build.directory}/webapp</transformDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-webapp</id>
+            <phase>package</phase>
+            <configuration>
+              <target>
+                <copy todir="${project.build.directory}/${project.build.finalName}"
+                    overwrite="true" force="true">
+                  <fileset dir="${project.build.directory}/webapp" />
+                </copy>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <executions>
+          <execution>
             <goals>
-              <goal>jar</goal>
+              <goal>single</goal>
             </goals>
+            <phase>package</phase>
             <configuration>
-              <artifact>
-                <groupId>org.apache.jackrabbit</groupId>
-                <artifactId>jackrabbit-webapp</artifactId>
-                <version>${project.version}</version>
-              </artifact>
+              <appendAssemblyId>false</appendAssemblyId>
+              <descriptors>
+                <descriptor>assembly.xml</descriptor>
+              </descriptors>
             </configuration>
           </execution>
         </executions>
@@ -112,43 +185,44 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.tika</groupId>
+      <artifactId>tika-core</artifactId>
+      <version>${tika.jakarta.version}</version>
+     </dependency>
+    <dependency>
+      <groupId>org.apache.tika</groupId>
+      <artifactId>tika-parsers-standard-package</artifactId>
+      <version>${tika.jakarta.version}</version>
+     </dependency>
+     <dependency>
       <groupId>org.apache.tomcat.embed</groupId>
       <artifactId>tomcat-embed-core</artifactId>
       <version>${tomcat.version}</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat.embed</groupId>
       <artifactId>tomcat-embed-jasper</artifactId>
       <version>${tomcat.version}</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat</groupId>
       <artifactId>tomcat-jasper</artifactId>
       <version>${tomcat.version}</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat</groupId>
       <artifactId>tomcat-jasper-el</artifactId>
       <version>${tomcat.version}</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat</groupId>
       <artifactId>tomcat-jsp-api</artifactId>
       <version>${tomcat.version}</version>
-    </dependency>
-    <dependency>
-     <groupId>org.apache.tika</groupId>
-     <artifactId>tika-parsers-standard-package</artifactId>
-     <exclusions>
-      <exclusion>
-       <groupId>org.bouncycastle</groupId>
-       <artifactId>bcmail-jdk15on</artifactId>
-      </exclusion>
-      <exclusion>
-       <groupId>org.bouncycastle</groupId>
-       <artifactId>bcprov-jdk15on</artifactId>
-      </exclusion>
-     </exclusions>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/jackrabbit-webapp-jakarta/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java b/jackrabbit-webapp-jakarta/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
index 0299a509a..d8ffeb5a4 100644
--- a/jackrabbit-webapp-jakarta/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
+++ b/jackrabbit-webapp-jakarta/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
@@ -26,15 +26,18 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import org.apache.catalina.Context;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.tomcat.util.scan.StandardJarScanner;
 import org.slf4j.bridge.SLF4JBridgeHandler;
 
 import com.gargoylesoftware.htmlunit.WebClient;
@@ -86,7 +89,9 @@ public class TomcatIT extends TestCase {
         tomcat.setHostname(url.getHost());
         tomcat.setPort(url.getPort());
         tomcat.getConnector();
-        tomcat.addWebapp("", war.getAbsolutePath());
+
+        Context ctx = tomcat.addWebapp("", war.getAbsolutePath());
+        ((StandardJarScanner)ctx.getJarScanner()).setScanClassPath(false);
 
         tomcat.start();
 
@@ -96,6 +101,11 @@ public class TomcatIT extends TestCase {
     private File extractWarFile(File warFile) throws IOException{
         String fileBaseName = FilenameUtils.getBaseName(warFile.getName());
         Path destFolderPath = Paths.get(warFile.getParent(), fileBaseName);
+        if (java.nio.file.Files.exists(destFolderPath)) {
+            java.nio.file.Files.move(destFolderPath, destFolderPath.resolveSibling(destFolderPath.getFileName() + "_original"),
+                    StandardCopyOption.ATOMIC_MOVE,
+                    StandardCopyOption.REPLACE_EXISTING);
+        }
         if (!java.nio.file.Files.exists(destFolderPath)) {
 	        try (ZipFile zipFile = new ZipFile(warFile, ZipFile.OPEN_READ)){
 	            Enumeration<? extends ZipEntry> entries = zipFile.entries();
@@ -109,7 +119,7 @@ public class TomcatIT extends TestCase {
 	                        java.nio.file.Files.createDirectories(entryPath.getParent());
 	                        try (InputStream in = zipFile.getInputStream(entry)){
 	                        	try (OutputStream out = new FileOutputStream(entryPath.toFile())){
-	                        		IOUtils.copy(in, out);                          
+	                        		IOUtils.copy(in, out);
 	                            }
 	                        }
 	                    }
@@ -119,7 +129,7 @@ public class TomcatIT extends TestCase {
         }
         return destFolderPath.toFile();
     }
-    
+
     protected void mkdirs(File dir, String errorMessageFormat) {
     	if (dir.exists() && dir.isDirectory()) {
     		return;
@@ -129,7 +139,7 @@ public class TomcatIT extends TestCase {
         	throw new RuntimeException(String.format(errorMessageFormat, dir.getPath()));
         }
     }
-    
+
 	public void testTomcat() throws Exception {
         HtmlPage page = client.getPage(url);
         assertEquals("Content Repository Setup", page.getTitleText());
diff --git a/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java b/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
index a54775817..c43e22eb3 100644
--- a/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
+++ b/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java
@@ -25,8 +25,10 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
+import org.apache.catalina.Context;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.commons.io.FileUtils;
+import org.apache.tomcat.util.scan.StandardJarScanner;
 import org.slf4j.bridge.SLF4JBridgeHandler;
 
 import com.gargoylesoftware.htmlunit.WebClient;
@@ -76,7 +78,8 @@ public class TomcatIT extends TestCase {
         tomcat.setHostname(url.getHost());
         tomcat.setPort(url.getPort());
 
-        tomcat.addWebapp("", war.getAbsolutePath());
+        Context ctx = tomcat.addWebapp("", war.getAbsolutePath());
+        ((StandardJarScanner)ctx.getJarScanner()).setScanClassPath(false);
 
         tomcat.start();
 
