diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl
index 6c2d7ed..906b88c 100644
--- a/kotlin/internal/jvm/compile.bzl
+++ b/kotlin/internal/jvm/compile.bzl
@@ -199,7 +199,13 @@
     # Collect and prepare plugin descriptor for the worker.
     plugin_info = _merge_plugin_infos(ctx.attr.plugins + ctx.attr.deps)
     if len(plugin_info.annotation_processors) > 0:
-        args.add("--kotlin_plugins", plugin_info.to_json())
+        processors = depset()
+        processorpath = depset()
+        for p in plugin_info.annotation_processors:
+            processors += [p.processor_class]
+            processorpath += p.classpath
+        args.add("--processors", processors)
+        args.add("--processorpath", processorpath)
 
     progress_message = "Compiling Kotlin to JVM %s { kt: %d, java: %d, srcjars: %d }" % (
         ctx.label,
diff --git a/src/main/kotlin/io/bazel/kotlin/builder/BUILD b/src/main/kotlin/io/bazel/kotlin/builder/BUILD
index 0983523..a60b1d1 100644
--- a/src/main/kotlin/io/bazel/kotlin/builder/BUILD
+++ b/src/main/kotlin/io/bazel/kotlin/builder/BUILD
@@ -39,7 +39,6 @@
     runtime_deps = [
         "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7",
         "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8",
-        "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar",
     ],
     deps = [
         ":builder_kt",
diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
index 9ef3736..1d45d39 100644
--- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
+++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt
@@ -15,7 +15,6 @@
  */
 package io.bazel.kotlin.builder.tasks
 
-import com.google.protobuf.util.JsonFormat
 import io.bazel.kotlin.builder.tasks.js.Kotlin2JsTaskExecutor
 import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor
 import io.bazel.kotlin.builder.toolchain.CompilationStatusException
@@ -39,13 +38,6 @@
 ) : CommandLineProgram {
     companion object {
         @JvmStatic
-        private val jsonTypeRegistry = JsonFormat.TypeRegistry.newBuilder()
-            .add(KotlinModel.getDescriptor().messageTypes).build()
-
-        @JvmStatic
-        private val jsonFormat: JsonFormat.Parser = JsonFormat.parser().usingTypeRegistry(jsonTypeRegistry)
-
-        @JvmStatic
         private val FLAGFILE_RE = Pattern.compile("""^--flagfile=((.*)-(\d+).params)$""").toRegex()
     }
 
@@ -63,7 +55,7 @@
             success = true
         } catch (ex: CompilationStatusException) {
             status = ex.status
-        } catch(throwable: Throwable) {
+        } catch (throwable: Throwable) {
             context.reportUnhandledException(throwable)
             throw throwable
         } finally {
@@ -108,7 +100,7 @@
         SOURCE_JARS("--source_jars"),
         SOURCE_PATH("--sourcepath"),
         BOOT_CLASSPATH("--bootclasspath"),
-        PROCESS_PATH("--processorpath"),
+        PROCESSOR_PATH("--processorpath"),
         PROCESSORS("--processors"),
         EXT_CLASSPATH("--extclasspath"),
         EXT_DIR("--extdir"),
@@ -131,7 +123,6 @@
         JVM_TARGET("--kotlin_jvm_target"),
         OUTPUT_SRCJAR("--kotlin_output_srcjar"),
         GENERATED_CLASSDIR("--kotlin_generated_classdir"),
-        PLUGINS("--kotlin_plugins"),
         FRIEND_PATHS("--kotlin_friend_paths"),
         OUTPUT_JDEPS("--kotlin_output_jdeps"),
         OUTPUT_JS_JAR("--kotlin_output_js_jar"),
@@ -217,6 +208,9 @@
                 putAllIndirectDependencies(argMap.labelDepMap(JavaBuilderFlags.DIRECT_DEPENDENCY))
                 putAllIndirectDependencies(argMap.labelDepMap(JavaBuilderFlags.INDIRECT_DEPENDENCY))
 
+                addAllProcessors(argMap.optional(JavaBuilderFlags.PROCESSORS) ?: emptyList())
+                addAllProcessorpaths(argMap.optional(JavaBuilderFlags.PROCESSOR_PATH) ?: emptyList())
+
                 argMap.optional(JavaBuilderFlags.SOURCES)?.iterator()?.partitionJvmSources(
                     { addKotlinSources(it) },
                     { addJavaSources(it) }
@@ -228,13 +222,6 @@
 
             with(root.infoBuilder) {
                 toolchainInfoBuilder.jvmBuilder.jvmTarget = argMap.mandatorySingle(KotlinBuilderFlags.JVM_TARGET)
-
-                argMap.optionalSingle(KotlinBuilderFlags.PLUGINS)?.let { input ->
-                    plugins = CompilerPlugins.newBuilder().let {
-                        jsonFormat.merge(input, it)
-                        it.build()
-                    }
-                }
             }
             root.build()
         }
diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
index 7debb8d..2f4d3c8 100644
--- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
+++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -51,7 +51,7 @@
         )
         val taskWithAdditionalSources = context.execute("expand sources") { expandWithSourceJarSources() }
         return context.execute({
-            "kapt (${info.plugins.annotationProcessorsList.joinToString(", ") { it.processorClass }})"
+            "kapt (${inputs.processorsList.joinToString(", ")})"
         }) { taskWithAdditionalSources.runAnnotationProcessors(context) }
     }
 
@@ -82,7 +82,7 @@
         context: CompilationTaskContext,
         printOnSuccess: Boolean = true
     ): List<String> {
-        check(info.plugins.annotationProcessorsList.isNotEmpty()) { "method called without annotation processors" }
+        check(inputs.processorsList.isNotEmpty()) { "method called without annotation processors" }
         return getCommonArgs().let { args ->
             args.addAll(pluginArgsEncoder.encode(context, this))
             args.addAll(inputs.kotlinSourcesList)
@@ -118,7 +118,7 @@
     private fun JvmCompilationTask.runAnnotationProcessors(
         context: CompilationTaskContext
     ): JvmCompilationTask =
-        if (info.plugins.annotationProcessorsList.isEmpty()) {
+        if (inputs.processorsList.isEmpty()) {
             this
         } else {
             runAnnotationProcessor(context, printOnSuccess = !context.isTracing).let { outputLines ->
diff --git a/src/main/kotlin/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt b/src/main/kotlin/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
index 8e00e13..93eba59 100644
--- a/src/main/kotlin/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
+++ b/src/main/kotlin/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt
@@ -21,6 +21,7 @@
 import java.io.ObjectOutputStream
 import java.util.*
 
+// TODO(hs) move the kapt specific stuff to the JVM package.
 class KotlinCompilerPluginArgsEncoder(
     private val jarPath: String,
     private val pluginId: String
@@ -76,21 +77,18 @@
 
         // "configuration" is an undocumented kapt3 argument. preparing the arguments this way is the only way to get more than one annotation processor class
         // passed to kotlinc.
-        fun encode(): List<String> =
-            listOf(
-                "-Xplugin=$jarPath",
-                "-P", "plugin:$pluginId:configuration=${encodeMultiMap(
-                    tally
-                )}"
-            )
+        fun encode(): List<String> = listOf(
+            "-Xplugin=$jarPath",
+            "-P", "plugin:$pluginId:configuration=${encodeMultiMap(tally)}"
+        )
     }
 
-    fun encode(context: CompilationTaskContext, command: JvmCompilationTask): List<String> {
+    fun encode(context: CompilationTaskContext, task: JvmCompilationTask): List<String> {
         val javacArgs = mutableMapOf<String, String>(
-            "-target" to command.info.toolchainInfo.jvm.jvmTarget
+            "-target" to task.info.toolchainInfo.jvm.jvmTarget
         )
-        val d = command.directories
-        return command.info.plugins.takeIf { it.annotationProcessorsList.isNotEmpty() }?.let { plugin ->
+        val d = task.directories
+        return if (task.inputs.processorsList.isNotEmpty()) {
             PluginArgs().let { arg ->
                 arg["sources"] = d.generatedSources.toString()
                 arg["classes"] = d.generatedClasses.toString()
@@ -102,13 +100,12 @@
                 context.whenTracing {
                     arg["verbose"] = "true"
                 }
-
-                arg["processors"] = plugin.annotationProcessorsList
-                    .filter { it.processorClass.isNotEmpty() }
-                    .onEach { processor -> processor.classpathList.forEach { arg.bindMulti("apclasspath", it) } }
-                    .joinToString(",") { it.processorClass }
+                arg["processors"] = task.inputs.processorsList.joinToString(",")
+                task.inputs.processorpathsList.forEach { arg.bindMulti("apclasspath", it) }
                 arg.encode()
             }
-        } ?: emptyList()
+        } else {
+            emptyList()
+        }
     }
 }
\ No newline at end of file
diff --git a/src/main/protobuf/jars/libkotlin_model_proto-speed.jar b/src/main/protobuf/jars/libkotlin_model_proto-speed.jar
index 38960a0..45dc3ea 100755
--- a/src/main/protobuf/jars/libkotlin_model_proto-speed.jar
+++ b/src/main/protobuf/jars/libkotlin_model_proto-speed.jar
Binary files differ
diff --git a/src/main/protobuf/kotlin_model.proto b/src/main/protobuf/kotlin_model.proto
index 3f108af..5fcacf7 100644
--- a/src/main/protobuf/kotlin_model.proto
+++ b/src/main/protobuf/kotlin_model.proto
@@ -18,26 +18,6 @@
 option java_package = "io.bazel.kotlin.model";
 option java_multiple_files = true;
 
-// An abstract definition of an annotation processor. This is encoded into a format understood by kapt3.
-// +stable
-message AnnotationProcessor {
-    // The annotation processor class.
-    string processor_class = 1;
-    // The Bazel `java_plugin` `generates_api` attribute.
-    bool generates_api = 2;
-    // The full transitive classpath required for annotation processing.
-    repeated string classpath = 3;
-    // The label of the plugin.
-    string label = 4;
-}
-
-// A container for all of the types of compiler plugins needed by the kotlin compilers.
-// +stable
-message CompilerPlugins {
-    // Regular java annotation_processor descriptors.
-    repeated AnnotationProcessor annotation_processors = 1;
-}
-
 // Toolchain info this contains info to be used to configure the compile tasks as well as configuring certain features
 // in IDE plugins.
 // +stable
@@ -90,16 +70,14 @@
     string passthrough_flags = 5;
     // Toolchain info for this build.
     KotlinToolchainInfo toolchain_info = 6;
-    // Compiler plugin descriptors.
-    CompilerPlugins plugins = 7;
     // Paths to Jars that the kotlin compiler will allow package private access to.
-    repeated string friend_paths = 8;
+    repeated string friend_paths = 7;
     // The path of the primary output for the task, this is derived from the flagfile.
-    string primary_output_path = 9;
+    string primary_output_path = 8;
     // Strings to enable various debugging behaviours
     // trace: enables trace logging.
     // timings: causes timing information to be printed at the of an action.
-    repeated string debug = 10;
+    repeated string debug = 9;
 }
 
 // Mested messages not marked with stable could be refactored.
@@ -140,6 +118,10 @@
         repeated string java_sources = 5;
         // Jars containing additional sources.
         repeated string source_jars = 6;
+        // Annotation processor FQNames
+        repeated string processors = 7;
+        // Annotation processor classpath.
+        repeated string processorpaths = 8;
     }
 
     CompilationTaskInfo info = 1;
diff --git a/src/test/kotlin/io/bazel/kotlin/builder/BUILD b/src/test/kotlin/io/bazel/kotlin/builder/BUILD
index 9c94869..ad1523f 100644
--- a/src/test/kotlin/io/bazel/kotlin/builder/BUILD
+++ b/src/test/kotlin/io/bazel/kotlin/builder/BUILD
@@ -27,7 +27,7 @@
     name = "test_lib",
     testonly = 1,
     srcs = [
-        "Dep.java",
+        "Deps.java",
         "KotlinBuilderJsTestTask.java",
         "KotlinBuilderJvmTestTask.java",
         "KotlinBuilderResource.java",
diff --git a/src/test/kotlin/io/bazel/kotlin/builder/Dep.java b/src/test/kotlin/io/bazel/kotlin/builder/Dep.java
deleted file mode 100644
index 4a3e1d4..0000000
--- a/src/test/kotlin/io/bazel/kotlin/builder/Dep.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2018 The Bazel Authors. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.bazel.kotlin.builder;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableSet;
-import io.bazel.kotlin.builder.utils.BazelRunFiles;
-
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Stream;
-
-@SuppressWarnings({"WeakerAccess", "unused"})
-@AutoValue
-public abstract class Dep {
-  public abstract String label();
-
-  public abstract String moduleName();
-
-  public abstract Set<String> runtimeDeps();
-
-  public abstract Set<String> compileJars();
-
-  public static Builder builder() {
-    return new AutoValue_Dep.Builder().runtimeDeps(ImmutableSet.of());
-  }
-
-  @SuppressWarnings("UnusedReturnValue")
-  @AutoValue.Builder
-  public abstract static class Builder {
-    public abstract Builder compileJars(Set<String> compileJars);
-
-    public abstract Builder label(String label);
-
-    public abstract Builder runtimeDeps(Set<String> runtimeDeps);
-
-    public abstract Builder moduleName(String moduleName);
-
-    abstract String label();
-
-    abstract Optional<String> moduleName();
-
-    abstract Dep autoBuild();
-
-    public Dep build() {
-      if (!moduleName().isPresent()) {
-        moduleName(label());
-      }
-      return autoBuild();
-    }
-  }
-
-  /** Collect all of the compile jars of all the dependencies. */
-  public static Stream<String> classpathOf(Dep... dependencies) {
-    return Stream.of(dependencies).flatMap(it -> it.compileJars().stream());
-  }
-
-  /** Import a single dep. Similar to a `kt_jvm_import` or a `kt_js_import`. */
-  public static Dep importJar(String label, String compileJar) {
-    return Dep.builder()
-        .label(label)
-        .compileJars(ImmutableSet.of(BazelRunFiles.resolveVerified(compileJar).getAbsolutePath()))
-        .build();
-  }
-}
diff --git a/src/test/kotlin/io/bazel/kotlin/builder/Deps.java b/src/test/kotlin/io/bazel/kotlin/builder/Deps.java
new file mode 100644
index 0000000..8a94799
--- /dev/null
+++ b/src/test/kotlin/io/bazel/kotlin/builder/Deps.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2018 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.bazel.kotlin.builder;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableSet;
+import io.bazel.kotlin.builder.utils.BazelRunFiles;
+
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Stream;
+
+public final class Deps {
+  @SuppressWarnings({"WeakerAccess", "unused"})
+  @AutoValue
+  public abstract static class Dep {
+    public abstract String label();
+
+    public abstract String moduleName();
+
+    public abstract Set<String> runtimeDeps();
+
+    public abstract Set<String> compileJars();
+
+    public static Builder builder() {
+      return new AutoValue_Deps_Dep.Builder().runtimeDeps(ImmutableSet.of());
+    }
+
+    @SuppressWarnings("UnusedReturnValue")
+    @AutoValue.Builder
+    public abstract static class Builder {
+      public abstract Builder compileJars(Set<String> compileJars);
+
+      public abstract Builder label(String label);
+
+      public abstract Builder runtimeDeps(Set<String> runtimeDeps);
+
+      public abstract Builder moduleName(String moduleName);
+
+      abstract String label();
+
+      abstract Optional<String> moduleName();
+
+      abstract Dep autoBuild();
+
+      public Dep build() {
+        if (!moduleName().isPresent()) {
+          moduleName(label());
+        }
+        return autoBuild();
+      }
+    }
+
+    /** Collect all of the compile jars of all the dependencies. */
+    public static Stream<String> classpathOf(Dep... dependencies) {
+      return Stream.of(dependencies).flatMap(it -> it.compileJars().stream());
+    }
+
+    /** Import a single dep. Similar to a `kt_jvm_import` or a `kt_js_import`. */
+    public static Dep importJar(String label, String compileJar) {
+      return Dep.builder()
+          .label(label)
+          .compileJars(ImmutableSet.of(BazelRunFiles.resolveVerified(compileJar).getAbsolutePath()))
+          .build();
+    }
+  }
+
+  @AutoValue
+  public abstract static class AnnotationProcessor {
+    abstract String processClass();
+
+    abstract Set<String> processorPath();
+
+    public static Builder builder() {
+      return new AutoValue_Deps_AnnotationProcessor.Builder();
+    }
+
+    @AutoValue.Builder
+    public abstract static class Builder {
+      public abstract Builder processClass(String processClass);
+
+      public abstract Builder processorPath(Set<String> processorPath);
+
+      public abstract AnnotationProcessor build();
+    }
+  }
+}
diff --git a/src/test/kotlin/io/bazel/kotlin/builder/KotlinBuilderJvmTestTask.java b/src/test/kotlin/io/bazel/kotlin/builder/KotlinBuilderJvmTestTask.java
index e2c294f..824a742 100644
--- a/src/test/kotlin/io/bazel/kotlin/builder/KotlinBuilderJvmTestTask.java
+++ b/src/test/kotlin/io/bazel/kotlin/builder/KotlinBuilderJvmTestTask.java
@@ -15,17 +15,19 @@
  */
 package io.bazel.kotlin.builder;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import io.bazel.kotlin.builder.toolchain.KotlinToolchain;
-import io.bazel.kotlin.model.AnnotationProcessor;
 import io.bazel.kotlin.model.CompilationTaskInfo;
 import io.bazel.kotlin.model.JvmCompilationTask;
 
-import java.util.Arrays;
+import java.util.HashSet;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static io.bazel.kotlin.builder.Deps.*;
+
 public final class KotlinBuilderJvmTestTask extends KotlinBuilderResource<JvmCompilationTask> {
   @SuppressWarnings({"unused", "WeakerAccess"})
   public static Dep
@@ -98,10 +100,18 @@
   }
 
   public void addAnnotationProcessors(AnnotationProcessor... annotationProcessors) {
+    Preconditions.checkState(
+        taskBuilder.getInputs().getProcessorsList().isEmpty(), "processors already set");
+    HashSet<String> processorClasses = new HashSet<>();
     taskBuilder
-        .getInfoBuilder()
-        .getPluginsBuilder()
-        .addAllAnnotationProcessors(Arrays.asList(annotationProcessors));
+        .getInputsBuilder()
+        .addAllProcessorpaths(
+            Stream.of(annotationProcessors)
+                .peek(it -> processorClasses.add(it.processClass()))
+                .flatMap(it -> it.processorPath().stream())
+                .distinct()
+                .collect(Collectors.toList()))
+        .addAllProcessors(processorClasses);
   }
 
   public void addDirectDependencies(Dep... dependencies) {
diff --git a/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmKaptTest.java b/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmKaptTest.java
index c3ca842..553d560 100644
--- a/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmKaptTest.java
+++ b/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmKaptTest.java
@@ -15,10 +15,10 @@
  */
 package io.bazel.kotlin.builder.tasks.jvm;
 
-import io.bazel.kotlin.builder.Dep;
+import io.bazel.kotlin.builder.Deps.AnnotationProcessor;
+import io.bazel.kotlin.builder.Deps.Dep;
 import io.bazel.kotlin.builder.KotlinBuilderJvmTestTask;
 import io.bazel.kotlin.builder.KotlinBuilderResource;
-import io.bazel.kotlin.model.AnnotationProcessor;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,11 +38,10 @@
           "external/io_bazel_rules_kotlin_com_google_auto_value_auto_value"
               + "/jar/io_bazel_rules_kotlin_com_google_auto_value_auto_value.jar");
   private static final AnnotationProcessor AUTO_VALUE_ANNOTATION_PROCESSOR =
-      AnnotationProcessor.newBuilder()
-          .setLabel("autovalue")
-          .setProcessorClass("com.google.auto.value.processor.AutoValueProcessor")
-          .addAllClasspath(
-              Dep.classpathOf(AUTO_VALUE, KOTLIN_ANNOTATIONS).collect(Collectors.toList()))
+      AnnotationProcessor.builder()
+          .processClass("com.google.auto.value.processor.AutoValueProcessor")
+          .processorPath(
+              Dep.classpathOf(AUTO_VALUE, KOTLIN_ANNOTATIONS).collect(Collectors.toSet()))
           .build();
 
   @Rule public KotlinBuilderJvmTestTask ctx = new KotlinBuilderJvmTestTask();
diff --git a/third_party/dependencies.yaml b/third_party/dependencies.yaml
index 6414939..c5bca82 100644
--- a/third_party/dependencies.yaml
+++ b/third_party/dependencies.yaml
@@ -20,10 +20,6 @@
       modules: ["java", "java-util"]
       lang: "java"
       version: "3.6.0"
-  com.google.code.gson:
-    gson:
-      lang: "java"
-      version: "2.8.4"
   com.google.guava:
     guava:
       lang: "java"
diff --git a/third_party/jvm/com/google/code/gson/BUILD b/third_party/jvm/com/google/code/gson/BUILD
index 0494dae..faeb2a7 100644
--- a/third_party/jvm/com/google/code/gson/BUILD
+++ b/third_party/jvm/com/google/code/gson/BUILD
@@ -5,7 +5,7 @@
         "//external:jar/io_bazel_rules_kotlin_com/google/code/gson/gson"
     ],
     visibility = [
-        "//visibility:public"
+        "//third_party/jvm:__subpackages__"
     ]
 )
 
diff --git a/third_party/jvm/workspace.bzl b/third_party/jvm/workspace.bzl
index e0ae5a3..fc0c2a1 100644
--- a/third_party/jvm/workspace.bzl
+++ b/third_party/jvm/workspace.bzl
@@ -70,7 +70,7 @@
     {"artifact": "com.google.auto.value:auto-value:1.5.3", "lang": "java", "sha1": "514df6a7c7938de35c7f68dc8b8f22df86037f38", "sha256": "238d3b7535096d782d08576d1e42f79480713ff0794f511ff2cc147363ec072d", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.3/auto-value-1.5.3.jar", "source": {"sha1": "1bb4def82e18be0b6a58ab089fba288d712db6cb", "sha256": "7c9adb9f49a4f07e226778951e087da85759a9ab53ac375f9d076de6dc84ca2b", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.3/auto-value-1.5.3-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_auto_value_auto_value", "actual": "@io_bazel_rules_kotlin_com_google_auto_value_auto_value//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/auto/value/auto_value"},
     {"artifact": "com.google.auto:auto-common:0.8", "lang": "java", "sha1": "c6f7af0e57b9d69d81b05434ef9f3c5610d498c4", "sha256": "97db1709f57b91b32edacb596ef4641872f227b7d99ad90e467f0d77f5ba134a", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.8/auto-common-0.8.jar", "source": {"sha1": "24705cafc9997c5eb6ae3270bd6234fdf9912bad", "sha256": "1e258bc08963dc8ffdcf22efa04b9fea6886761e077fc126ebacf92d11c9abec", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.8/auto-common-0.8-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_auto_auto_common", "actual": "@io_bazel_rules_kotlin_com_google_auto_auto_common//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/auto/auto_common"},
     {"artifact": "com.google.code.findbugs:jsr305:1.3.9", "lang": "java", "sha1": "40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf", "sha256": "905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar", "name": "io_bazel_rules_kotlin_com_google_code_findbugs_jsr305", "actual": "@io_bazel_rules_kotlin_com_google_code_findbugs_jsr305//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/code/findbugs/jsr305"},
-    {"artifact": "com.google.code.gson:gson:2.8.4", "lang": "java", "sha1": "d0de1ca9b69e69d1d497ee3c6009d015f64dad57", "sha256": "53bc5fe7644db908e6071d6c8b59059acadce7fc14217933d7251994e8673104", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.4/gson-2.8.4.jar", "source": {"sha1": "6b1d345789e396d4342821ce01ddfb11dbdd50cc", "sha256": "32821f053a181c3568ceeeff571e54de9f68e1bca99f92e37cf966a5583b8637", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.4/gson-2.8.4-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_code_gson_gson", "actual": "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/code/gson/gson"},
+    {"artifact": "com.google.code.gson:gson:2.7", "lang": "java", "sha1": "751f548c85fa49f330cecbb1875893f971b33c4e", "sha256": "2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.jar", "source": {"sha1": "bbb63ca253b483da8ee53a50374593923e3de2e2", "sha256": "2d3220d5d936f0a26258aa3b358160741a4557e046a001251e5799c2db0f0d74", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_code_gson_gson", "actual": "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/code/gson/gson"},
     {"artifact": "com.google.dagger:dagger-compiler:2.16", "lang": "java", "sha1": "203235b0c6875c39a0b5053dfc2f043acab04acf", "sha256": "723dca807605ddc82cd86c4e334493789ad7fb3fe863b264a8853611c89baf3d", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-compiler/2.16/dagger-compiler-2.16.jar", "source": {"sha1": "7ceeb0333370b3f0c28f4b23b1db72d8aae5efa3", "sha256": "05dbe0867bd1efce9a446359d30a0ad2bfe0407b1afd2b31a3058944d2bf3a7d", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-compiler/2.16/dagger-compiler-2.16-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_dagger_dagger_compiler", "actual": "@io_bazel_rules_kotlin_com_google_dagger_dagger_compiler//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/dagger/dagger_compiler"},
     {"artifact": "com.google.dagger:dagger-producers:2.16", "lang": "java", "sha1": "4e084a99b71a31e7079603c9675cb4994aff1344", "sha256": "97737907bde6e94cfa90883fa2a8ff4765400b9561bdcb4d83fe475ddbaf22af", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-producers/2.16/dagger-producers-2.16.jar", "source": {"sha1": "b477b4eebb171e718c7c9c4e4968913e50cf8e52", "sha256": "93838ce482666e54ed7a10d97558db99fce7c761392db44c259805e66664f384", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-producers/2.16/dagger-producers-2.16-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_dagger_dagger_producers", "actual": "@io_bazel_rules_kotlin_com_google_dagger_dagger_producers//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/dagger/dagger_producers"},
     {"artifact": "com.google.dagger:dagger-spi:2.16", "lang": "java", "sha1": "26da9b6bf60185ca6f42da51bc20d93b2c825661", "sha256": "1b14f73b7c1088ab399f9fcf9f98aecba7a51d9fbfeeb63c1ad5dab9aadbef86", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-spi/2.16/dagger-spi-2.16.jar", "source": {"sha1": "17302c42cf920a1af28c8400b39462a78b63f549", "sha256": "62442cb1017f3498a2e2528fe5ac5d965f51e65090fa21cf0df01fa240e1ab07", "repository": "https://repo.maven.apache.org/maven2/", "url": "https://repo.maven.apache.org/maven2/com/google/dagger/dagger-spi/2.16/dagger-spi-2.16-sources.jar"} , "name": "io_bazel_rules_kotlin_com_google_dagger_dagger_spi", "actual": "@io_bazel_rules_kotlin_com_google_dagger_dagger_spi//jar", "bind": "jar/io_bazel_rules_kotlin_com/google/dagger/dagger_spi"},
