diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml
new file mode 100644
index 000000000000..39586e4e0aba
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml
@@ -0,0 +1,10 @@
+
+
+ 4.0.0
+
+ com.example
+ maven-multimodule-test-java-version
+ 1.0
+
+ main-module
+
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java
new file mode 100644
index 000000000000..d2397803d550
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java
@@ -0,0 +1,7 @@
+package com.example;
+
+public class App {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+ }
+}
\ No newline at end of file
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml
new file mode 100644
index 000000000000..ea5f8b5b03b3
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+ com.example
+ maven-multimodule-test-java-version
+ 1.0
+ pom
+
+
+ 17
+
+
+
+ main-module
+ test-module
+
+
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected b/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected
new file mode 100644
index 000000000000..08385ca91a0a
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected
@@ -0,0 +1,7 @@
+main-module/pom.xml
+main-module/src/main/java/com/example/App.java
+main-module/target/maven-archiver/pom.properties
+pom.xml
+test-module/pom.xml
+test-module/src/main/java/com/example/tests/TestUtils.java
+test-module/target/maven-archiver/pom.properties
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml
new file mode 100644
index 000000000000..5895a91b2c19
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml
@@ -0,0 +1,14 @@
+
+
+ 4.0.0
+
+ com.example
+ maven-multimodule-test-java-version
+ 1.0
+
+ test-module
+
+
+ 21
+
+
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java
new file mode 100644
index 000000000000..30e83856200f
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java
@@ -0,0 +1,12 @@
+package com.example.tests;
+
+// Requires Java 21: switch with pattern matching and guards
+public class TestUtils {
+ public static String analyze(Object obj) {
+ return switch (obj) {
+ case String s when s.length() > 5 -> "long";
+ case String s -> "short";
+ default -> "other";
+ };
+ }
+}
\ No newline at end of file
diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py
new file mode 100644
index 000000000000..eb49efe6a2a3
--- /dev/null
+++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py
@@ -0,0 +1,2 @@
+def test(codeql, java):
+ codeql.database.create()