diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/pom.xml b/java/ql/integration-tests/all-platforms/java/buildless-maven/pom.xml
new file mode 100644
index 00000000000..ec4aaf128c1
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/pom.xml
@@ -0,0 +1,114 @@
+
+
+
+ 4.0.0
+
+ com.example
+ maven-sample
+ 1.0-SNAPSHOT
+
+ maven-sample
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+
+
+
+ exec-maven-plugin
+ org.codehaus.mojo
+ 1.1.1
+
+
+ check-maven-version
+ package
+
+ java
+
+
+
+
+ com.example.App
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ 2.19.1
+
+
+
+ check
+
+ compile
+
+
+
+
+
+ /* FAIL ME */
+
+
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+
+ maven-resources-plugin
+ 3.0.2
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ maven-surefire-plugin
+ 2.22.1
+
+
+ maven-jar-plugin
+ 3.0.2
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ maven-site-plugin
+ 3.7.1
+
+
+ maven-project-info-reports-plugin
+ 3.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/java/com/example/App.java b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/java/com/example/App.java
new file mode 100644
index 00000000000..c9eec918587
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/java/com/example/App.java
@@ -0,0 +1,30 @@
+package com.example;
+
+import java.util.regex.Pattern;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ String expectedVersion = System.getenv("EXPECT_MAVEN");
+ Path mavenHome = Paths.get(System.getProperty("maven.home")).normalize();
+ String observedVersion = mavenHome.getFileName().toString();
+ if (expectedVersion != null && !expectedVersion.equals(observedVersion)) {
+ System.err.println("Wrong maven version, expected '" + expectedVersion + "' but got '" + observedVersion + "'" + mavenHome);
+ System.exit(1);
+ }
+ String commandMatcher = System.getenv("EXPECT_COMMAND_REGEX");
+ String command = System.getProperty("sun.java.command");
+ if (commandMatcher != null && !Pattern.matches(commandMatcher, command)) {
+ System.err.println("Wrong command line, '" + command + "' does not match '" + commandMatcher + "'");
+ System.exit(1);
+ }
+ }
+}
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/my-app.properties b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/my-app.properties
new file mode 100644
index 00000000000..e566b49a29a
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/my-app.properties
@@ -0,0 +1 @@
+version=1.0
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/page.xml b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/page.xml
new file mode 100644
index 00000000000..2bab459cb03
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/page.xml
@@ -0,0 +1,8 @@
+
+
+A sample
+
+
+Hello world!
+
+
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/struts.xml b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/struts.xml
new file mode 100644
index 00000000000..73fc0c6b9cb
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/main/resources/struts.xml
@@ -0,0 +1,4 @@
+
+
+This is a sample file
+
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/test/java/com/example/AppTest.java
new file mode 100644
index 00000000000..22a94ca6f01
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/src/test/java/com/example/AppTest.java
@@ -0,0 +1,20 @@
+package com.example;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected
new file mode 100644
index 00000000000..5d9163f3409
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.expected
@@ -0,0 +1,8 @@
+xmlFiles
+| pom.xml:0:0:0:0 | pom.xml |
+| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml |
+| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml |
+propertiesFiles
+#select
+| src/main/java/com/example/App.java:0:0:0:0 | App |
+| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest |
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py
new file mode 100644
index 00000000000..fc295ae5e35
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py
@@ -0,0 +1,5 @@
+import sys
+
+from create_database_utils import *
+
+run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"})
diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql
new file mode 100644
index 00000000000..25cd26fdd14
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.ql
@@ -0,0 +1,9 @@
+import java
+
+from File f
+where f.isSourceFile()
+select f
+
+query predicate xmlFiles(XmlFile x) { any() }
+
+query predicate propertiesFiles(File f) { f.getExtension() = "properties" }
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/java/com/example/App.java b/java/ql/integration-tests/all-platforms/java/buildless/src/main/java/com/example/App.java
new file mode 100644
index 00000000000..c9eec918587
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/src/main/java/com/example/App.java
@@ -0,0 +1,30 @@
+package com.example;
+
+import java.util.regex.Pattern;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ String expectedVersion = System.getenv("EXPECT_MAVEN");
+ Path mavenHome = Paths.get(System.getProperty("maven.home")).normalize();
+ String observedVersion = mavenHome.getFileName().toString();
+ if (expectedVersion != null && !expectedVersion.equals(observedVersion)) {
+ System.err.println("Wrong maven version, expected '" + expectedVersion + "' but got '" + observedVersion + "'" + mavenHome);
+ System.exit(1);
+ }
+ String commandMatcher = System.getenv("EXPECT_COMMAND_REGEX");
+ String command = System.getProperty("sun.java.command");
+ if (commandMatcher != null && !Pattern.matches(commandMatcher, command)) {
+ System.err.println("Wrong command line, '" + command + "' does not match '" + commandMatcher + "'");
+ System.exit(1);
+ }
+ }
+}
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/my-app.properties b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/my-app.properties
new file mode 100644
index 00000000000..e566b49a29a
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/my-app.properties
@@ -0,0 +1 @@
+version=1.0
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/page.xml b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/page.xml
new file mode 100644
index 00000000000..2bab459cb03
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/page.xml
@@ -0,0 +1,8 @@
+
+
+A sample
+
+
+Hello world!
+
+
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/struts.xml b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/struts.xml
new file mode 100644
index 00000000000..73fc0c6b9cb
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/src/main/resources/struts.xml
@@ -0,0 +1,4 @@
+
+
+This is a sample file
+
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/all-platforms/java/buildless/src/test/java/com/example/AppTest.java
new file mode 100644
index 00000000000..22a94ca6f01
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/src/test/java/com/example/AppTest.java
@@ -0,0 +1,20 @@
+package com.example;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.expected b/java/ql/integration-tests/all-platforms/java/buildless/test.expected
new file mode 100644
index 00000000000..f5801127103
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/test.expected
@@ -0,0 +1,7 @@
+xmlFiles
+| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml |
+| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml |
+propertiesFiles
+#select
+| src/main/java/com/example/App.java:0:0:0:0 | App |
+| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest |
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.py b/java/ql/integration-tests/all-platforms/java/buildless/test.py
new file mode 100644
index 00000000000..eeee63c9913
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/test.py
@@ -0,0 +1,5 @@
+import sys
+
+from create_database_utils import *
+
+run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"})
diff --git a/java/ql/integration-tests/all-platforms/java/buildless/test.ql b/java/ql/integration-tests/all-platforms/java/buildless/test.ql
new file mode 100644
index 00000000000..25cd26fdd14
--- /dev/null
+++ b/java/ql/integration-tests/all-platforms/java/buildless/test.ql
@@ -0,0 +1,9 @@
+import java
+
+from File f
+where f.isSourceFile()
+select f
+
+query predicate xmlFiles(XmlFile x) { any() }
+
+query predicate propertiesFiles(File f) { f.getExtension() = "properties" }