diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
index 18d7370..f7b1685 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
@@ -104,6 +104,7 @@
   private final boolean experimentalEnableJspecify;
   private final boolean requireJavaPluginInfo;
   private final boolean multiReleaseDeployJars;
+  private final boolean disallowJavaImportExports;
 
   // TODO(dmarting): remove once we have a proper solution for #2539
   private final boolean useLegacyBazelJavaTest;
@@ -141,6 +142,7 @@
     this.limitAndroidLintToAndroidCompatible = javaOptions.limitAndroidLintToAndroidCompatible;
     this.requireJavaPluginInfo = javaOptions.requireJavaPluginInfo;
     this.multiReleaseDeployJars = javaOptions.multiReleaseDeployJars;
+    this.disallowJavaImportExports = javaOptions.disallowJavaImportExports;
 
     Map<String, Label> optimizers = javaOptions.bytecodeOptimizers;
     if (optimizers.size() > 1) {
@@ -347,6 +349,10 @@
     return multiReleaseDeployJars;
   }
 
+  public boolean disallowJavaImportExports() {
+    return disallowJavaImportExports;
+  }
+
   @Override
   public String starlarkOneVersionEnforcementLevel() {
     return oneVersionEnforcementLevel().name();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
index ebccff3..f8f90ad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
@@ -56,6 +56,11 @@
       return null;
     }
 
+    if (exportError(ruleContext)) {
+      ruleContext.ruleError(
+          "java_import.exports is no longer supported; use java_import.deps instead");
+    }
+
     ImmutableList<TransitiveInfoCollection> targets =
         ImmutableList.<TransitiveInfoCollection>builder()
             .addAll(ruleContext.getPrerequisites("deps"))
@@ -188,6 +193,17 @@
     return isDirect ? provider.getDirectCompileTimeJars() : provider.getTransitiveCompileTimeJars();
   }
 
+  private static boolean exportError(RuleContext ruleContext) {
+    if (!ruleContext.attributes().isAttributeValueExplicitlySpecified("exports")) {
+      return false;
+    }
+    if (ruleContext.getFragment(JavaConfiguration.class).disallowJavaImportExports()) {
+      return true;
+    }
+    return Allowlist.hasAllowlist(ruleContext, "java_import_exports")
+        && !Allowlist.isAvailable(ruleContext, "java_import_exports");
+  }
+
   private NestedSet<Artifact> collectTransitiveJavaSourceJars(
       RuleContext ruleContext, Artifact srcJar) {
     NestedSetBuilder<Artifact> transitiveJavaSourceJarBuilder = NestedSetBuilder.stableOrder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index cc28a8e..1475c13 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -561,6 +561,15 @@
   public boolean multiReleaseDeployJars;
 
   @Option(
+      name = "incompatible_disallow_java_import_exports",
+      defaultValue = "false",
+      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+      effectTags = {OptionEffectTag.UNKNOWN},
+      metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+      help = "When enabled, java_import.exports is not supported.")
+  public boolean disallowJavaImportExports;
+
+  @Option(
       name = "experimental_enable_jspecify",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
@@ -629,6 +638,8 @@
 
     host.multiReleaseDeployJars = multiReleaseDeployJars;
 
+    host.disallowJavaImportExports = disallowJavaImportExports;
+
     return host;
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/view/java/JavaImportConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/view/java/JavaImportConfiguredTargetTest.java
index f33783e..5d38681 100644
--- a/src/test/java/com/google/devtools/build/lib/view/java/JavaImportConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/view/java/JavaImportConfiguredTargetTest.java
@@ -59,6 +59,13 @@
         "java_import(name = 'libraryjar_with_srcjar',",
         "            jars = ['library.jar'],",
         "            srcjar = 'library.srcjar')");
+
+    scratch.overwriteFile(
+        "tools/allowlists/java_import_exports/BUILD",
+        "package_group(",
+        "    name = 'java_import_exports',",
+        "    packages = ['//...'],",
+        ")");
   }
 
   @Test
@@ -540,4 +547,17 @@
     assertThat(jars).doesNotContain("b-ijar.jar");
     assertThat(jars).contains("b.jar");
   }
+
+  @Test
+  public void testExports() throws Exception {
+    useConfiguration("--incompatible_disallow_java_import_exports");
+    checkError(
+        "ugly",
+        "jar",
+        "java_import.exports is no longer supported; use java_import.deps instead",
+        "java_library(name = 'dep', srcs = ['dep.java'])",
+        "java_import(name = 'jar',",
+        "    jars = ['dummy.jar'],",
+        "    exports = [':dep'])");
+  }
 }
