diff --git a/bramble-api/build.gradle b/bramble-api/build.gradle
index e1d90cdd6d2d5f9456c9cde66b584cf441717c74..7b03f5c18869fbec6f3cb67dfecfefedc322bcec 100644
--- a/bramble-api/build.gradle
+++ b/bramble-api/build.gradle
@@ -38,10 +38,5 @@ artifacts {
 
 // If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs
 tasks.withType(JavaCompile) {
-	doFirst {
-		def home = System.env.JAVA_6_HOME;
-		if (home != null && !home.isEmpty()) {
-			options.bootstrapClasspath = files("${home}/jre/lib/rt.jar", "${home}/jre/lib/jsse.jar")
-		}
-	}
+	useJava6StandardLibrary(it)
 }
diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle
index abc388449c0f2a42a8eb18e37e068d3d1f9b31ea..324947821de08c852c3e62026dca211f5da32ebb 100644
--- a/bramble-core/build.gradle
+++ b/bramble-core/build.gradle
@@ -41,10 +41,5 @@ artifacts {
 
 // If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs
 tasks.withType(JavaCompile) {
-	doFirst {
-		def home = System.env.JAVA_6_HOME;
-		if (home != null && !home.isEmpty()) {
-			options.bootstrapClasspath = files("${home}/jre/lib/rt.jar", "${home}/jre/lib/jsse.jar")
-		}
-	}
+	useJava6StandardLibrary(it)
 }
diff --git a/briar-api/build.gradle b/briar-api/build.gradle
index 29f9f9aa797309839bdd2a334b3da41f9da017fe..0c6e6e1d76eb9f2fb09e49380b7f13ce8f83945b 100644
--- a/briar-api/build.gradle
+++ b/briar-api/build.gradle
@@ -8,10 +8,5 @@ dependencies {
 
 // If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs
 tasks.withType(JavaCompile) {
-	doFirst {
-		def home = System.env.JAVA_6_HOME;
-		if (home != null && !home.isEmpty()) {
-			options.bootstrapClasspath = files("${home}/jre/lib/rt.jar", "${home}/jre/lib/jsse.jar")
-		}
-	}
+	useJava6StandardLibrary(it)
 }
diff --git a/briar-core/build.gradle b/briar-core/build.gradle
index efbdf0a2af60ac5d857b97bd306a26a2813e6594..a4dddb5a2a42283349038d3849544f0a21fefb4d 100644
--- a/briar-core/build.gradle
+++ b/briar-core/build.gradle
@@ -36,10 +36,5 @@ dependencyVerification {
 
 // If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs
 tasks.withType(JavaCompile) {
-	doFirst {
-		def home = System.env.JAVA_6_HOME;
-		if (home != null && !home.isEmpty()) {
-			options.bootstrapClasspath = files("${home}/jre/lib/rt.jar", "${home}/jre/lib/jsse.jar")
-		}
-	}
+	useJava6StandardLibrary(it)
 }
diff --git a/build.gradle b/build.gradle
index 9de3d091bd9bac46b2940bfef27d81aefbb8af55..fc55df933a7eaf39d2540692465b98e6cb98b218 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,3 +24,27 @@ buildscript {
 		classpath files('libs/gradle-witness.jar')
 	}
 }
+
+// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs
+ext.useJava6StandardLibrary = { task ->
+	def home = System.env.JAVA_6_HOME;
+	if (home != null && !home.isEmpty()) {
+		println "Setting Java 6 bootstrap classpath for ${task.name}"
+		task.dependsOn createJavaLangInvokeJar
+		task.options.bootstrapClasspath = files(
+				"${project.rootDir}/build/invoke.jar",
+				"${home}/jre/lib/rt.jar",
+				"${home}/jre/lib/jsse.jar"
+		)
+	}
+}
+
+// Create a jar containing the java.lang.invoke classes for the Java 6 bootstrap classpath
+task createJavaLangInvokeJar(type: Zip) {
+	archiveName 'invoke.jar'
+	destinationDir file("${project.rootDir}/build")
+	from zipTree("${System.getProperty('java.home')}/lib/rt.jar").matching {
+		include 'java/lang/invoke/*'
+	}
+	include '**/*'
+}