diff --git a/java/java.gradle b/java/java.gradle
new file mode 100644
index 0000000..6ba893f
--- /dev/null
+++ b/java/java.gradle
@@ -0,0 +1,135 @@
+import org.gradle.internal.os.OperatingSystem
+
+apply plugin: 'java'
+apply plugin: 'net.ltgt.errorprone'
+
+repositories {
+    mavenCentral()
+}
+
+configurations.errorprone {
+    resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.9'
+}
+
+def generatedJNIHeaderLoc = "${buildDir}/include"
+
+sourceSets {
+    user {
+        java {
+            srcDirs = [userJavaSrc]
+        }
+    }
+    main {
+        java {
+            srcDirs = [javaSrc]
+        }
+    }
+}
+    
+dependencies {
+    compile sourceSets.user.output
+    runtime sourceSets.user.output
+    compile wpilibjDep
+    runtime wpilibjDep
+    compile javaNetTablesDep
+    runtime javaNetTablesDep
+    compile fileTree(dir: javaLibraryLoc, include: ['*.jar'])
+    runtime fileTree(dir: javaLibraryLoc, include: ['*.jar'])
+}
+
+jar {
+    description = 'Generates jar'
+    baseName = libraryName
+    duplicatesStrategy = 'exclude'
+
+    dependsOn { classes }
+
+    if (embedJavaLibraries) {
+        def tree = fileTree(dir: javaLibraryLoc, include: ['*.jar'])
+        tree.each {
+            from zipTree(it.path)
+        }
+    }
+
+    if (embedJavaLibraries) {
+        from sourceSets.user.output
+    }
+}
+
+/**
+ * Generates the JNI headers
+ */
+task jniHeaders {
+    description = 'Generates JNI headers'
+    group = 'WPILib'
+    def outputFolder = file(generatedJNIHeaderLoc)
+    inputs.files sourceSets.main.output
+    outputs.file outputFolder
+    doLast {
+        outputFolder.mkdirs()
+        exec {
+            ignoreExitValue = true
+            executable org.gradle.internal.jvm.Jvm.current().getExecutable('javah')
+            args '-d', outputFolder
+            args '-classpath', sourceSets.main.runtimeClasspath.asPath
+            args jniDefinitions
+        }
+    }
+}
+
+ext.getNativeJNISymbols = {
+    def symbolsList = []
+
+    jniHeaders.outputs.files.each {
+        FileTree tree = fileTree(dir: it)
+        tree.each { File file ->
+            file.eachLine { line ->
+                if (line.trim()) {
+                    if (line.startsWith("JNIEXPORT ") && line.contains('JNICALL')) {
+                        def (p1, p2) = line.split('JNICALL').collect { it.trim() }
+                        // p2 is our JNI call
+                        symbolsList << p2
+                    }
+                }
+            }
+        }
+    }
+
+    return symbolsList
+}
+
+clean {
+    delete generatedJNIHeaderLoc
+}
+
+compileJava {
+    options.compilerArgs << '-Xlint:unchecked' << "-Werror"
+}
+
+javadoc {
+    options.addStringOption('Xdoclint:none', '-quiet')
+}
+
+// This creates a lambda that the main build.gradle can access, which sets up the JNI includes for the
+// target build platform. This lambda is exposed as a property in the main build.gradle.
+ext.setupJniIncludes = { binaries ->
+    def platformSpecificIncludeFlag = { loc, cppCompiler ->
+        if (OperatingSystem.current().isWindows()) {
+            cppCompiler.args "/I$loc"
+        } else {
+            cppCompiler.args '-I', loc
+        }
+    }
+    binaries.all {
+        tasks.withType(CppCompile) {
+            cppCompiler.args '-I', file("${rootDir}/java/arm-linux").absolutePath
+            cppCompiler.args '-I', file("${rootDir}/java/arm-linux/linux").absolutePath
+
+            jniHeaders.outputs.files.each { file ->
+                cppCompiler.args '-I', file.getPath()
+            }
+
+            dependsOn jniHeaders
+        }
+    }
+}
