diff --git a/shared/java/javacommon.gradle b/shared/java/javacommon.gradle
index 32078f8..48a5062 100644
--- a/shared/java/javacommon.gradle
+++ b/shared/java/javacommon.gradle
@@ -117,9 +117,8 @@
 }
 
 dependencies {
-    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.0'
-    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.0'
-    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
+    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
+    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
 
     devImplementation sourceSets.main.output
 }
@@ -147,22 +146,12 @@
     protoc {
         artifact = 'com.google.protobuf:protoc:3.21.12'
     }
-    plugins {
-        quickbuf {
-            artifact = 'us.hebi.quickbuf:protoc-gen-quickbuf:1.3.2'
-        }
-    }
     generateProtoTasks {
         all().configureEach { task ->
             task.builtins {
                 cpp {}
                 remove java
             }
-            task.plugins {
-                quickbuf {
-                    option "gen_descriptors=true"
-                }
-            }
         }
     }
 }
diff --git a/shared/java/javastyle.gradle b/shared/java/javastyle.gradle
index 49332bf..41ddb47 100644
--- a/shared/java/javastyle.gradle
+++ b/shared/java/javastyle.gradle
@@ -1,83 +1,85 @@
-if (!project.hasProperty('skipJavaFormat')) {
-    apply plugin: 'checkstyle'
+if (project.hasProperty('skipJavaFormat')) {
+    return;
+}
 
-    checkstyle {
-        toolVersion = "10.12.2"
-        configDirectory = file("${project.rootDir}/styleguide")
-        config = resources.text.fromFile(new File(configDirectory.get().getAsFile(), "checkstyle.xml"))
+apply plugin: 'checkstyle'
+
+checkstyle {
+    toolVersion = "10.12.2"
+    configDirectory = file("${project.rootDir}/styleguide")
+    config = resources.text.fromFile(new File(configDirectory.get().getAsFile(), "checkstyle.xml"))
+}
+
+apply plugin: 'pmd'
+
+pmd {
+    toolVersion = '6.55.0'
+    consoleOutput = true
+    reportsDir = file("$project.buildDir/reports/pmd")
+    ruleSetFiles = files(new File(rootDir, "styleguide/pmd-ruleset.xml"))
+    ruleSets = []
+}
+
+apply plugin: 'com.diffplug.spotless'
+
+spotless {
+    java {
+        target fileTree('.') {
+            include '**/*.java'
+            exclude '**/build/**', '**/build-*/**', '**/bin/**', "src/generated/**"
+        }
+        toggleOffOn()
+        googleJavaFormat()
+        removeUnusedImports()
+        trimTrailingWhitespace()
+        endWithNewline()
     }
-
-    apply plugin: 'pmd'
-
-    pmd {
-        toolVersion = '6.55.0'
-        consoleOutput = true
-        reportsDir = file("$project.buildDir/reports/pmd")
-        ruleSetFiles = files(new File(rootDir, "styleguide/pmd-ruleset.xml"))
-        ruleSets = []
+    groovyGradle {
+        target fileTree('.') {
+            include '**/*.gradle'
+            exclude '**/build/**', '**/build-*/**', '**/bin/**'
+        }
+        greclipse()
+        indentWithSpaces(4)
+        trimTrailingWhitespace()
+        endWithNewline()
     }
-
-    apply plugin: 'com.diffplug.spotless'
-
-    spotless {
-        java {
-            target fileTree('.') {
-                include '**/*.java'
-                exclude '**/build/**', '**/build-*/**', '**/bin/**'
-            }
-            toggleOffOn()
-            googleJavaFormat()
-            removeUnusedImports()
-            trimTrailingWhitespace()
-            endWithNewline()
+    json {
+        target fileTree('.') {
+            include '**/*.json'
+            exclude '**/build/**', '**/build-*/**', '**/bin/**'
+            exclude '**/simgui-ds.json', '**/simgui-window.json', '**/simgui.json', '**/networktables.json'
         }
-        groovyGradle {
-            target fileTree('.') {
-                include '**/*.gradle'
-                exclude '**/build/**', '**/build-*/**', '**/bin/**'
-            }
-            greclipse()
-            indentWithSpaces(4)
-            trimTrailingWhitespace()
-            endWithNewline()
-        }
-        json {
-            target fileTree('.') {
-                include '**/*.json'
-                exclude '**/build/**', '**/build-*/**', '**/bin/**'
-                exclude '**/simgui-ds.json', '**/simgui-window.json', '**/simgui.json', '**/networktables.json'
-            }
-            gson()
-              .indentWithSpaces(2)
-        }
-        format 'xml', {
-            target fileTree('.') {
-                include '**/*.xml'
-                exclude '**/build/**', '**/build-*/**', '**/bin/**', '**/.idea/**', '**/.run/**'
-            }
-            eclipseWtp('xml')
-            trimTrailingWhitespace()
-            indentWithSpaces(2)
-            endWithNewline()
-        }
-        format 'misc', {
-            target fileTree('.') {
-                include '**/*.md', '**/.gitignore'
-                exclude '**/build/**', '**/build-*/**', '**/bin/**'
-            }
-            trimTrailingWhitespace()
-            indentWithSpaces(2)
-            endWithNewline()
-        }
+        gson()
+          .indentWithSpaces(2)
     }
-
-    apply plugin: 'com.github.spotbugs'
-
-    spotbugs {
-        ignoreFailures = false
-        effort = 'max'
-        excludeFilter = file("${project.rootDir}/styleguide/spotbugs-exclude.xml")
+    format 'xml', {
+        target fileTree('.') {
+            include '**/*.xml'
+            exclude '**/build/**', '**/build-*/**', '**/bin/**', '**/.idea/**', '**/.run/**'
+        }
+        eclipseWtp('xml')
+        trimTrailingWhitespace()
+        indentWithSpaces(2)
+        endWithNewline()
     }
+    format 'misc', {
+        target fileTree('.') {
+            include '**/*.md', '**/.gitignore'
+            exclude '**/build/**', '**/build-*/**', '**/bin/**'
+        }
+        trimTrailingWhitespace()
+        indentWithSpaces(2)
+        endWithNewline()
+    }
+}
+
+apply plugin: 'com.github.spotbugs'
+
+spotbugs {
+    ignoreFailures = false
+    effort = spotbugsEffort
+    excludeFilter = file("${project.rootDir}/styleguide/spotbugs-exclude.xml")
 }
 
 task javaFormat {
