diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index 84e2a76..bda0b7e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -47,18 +47,6 @@
   /** This is where deprecated options go to die. */
   public static class GraveyardOptions extends OptionsBase {
     @Option(
-        name = "incompatible_disallow_legacy_java_provider",
-        defaultValue = "true",
-        documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
-        effectTags = {OptionEffectTag.NO_OP},
-        metadataTags = {
-          OptionMetadataTag.INCOMPATIBLE_CHANGE,
-          OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
-        },
-        help = "Deprecated. No-op.")
-    public boolean incompatibleDisallowLegacyJavaProvider;
-
-    @Option(
         name = "incompatible_disable_legacy_proto_provider",
         defaultValue = "true",
         documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index e3bdb33..adaf336 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -321,6 +321,18 @@
   public boolean incompatibleDisallowHashingFrozenMutables;
 
   @Option(
+      name = "incompatible_disallow_legacy_java_provider",
+      defaultValue = "true",
+      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
+      effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
+      metadataTags = {
+        OptionMetadataTag.INCOMPATIBLE_CHANGE,
+        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+      },
+      help = "If set to true, usages of old .java provider are disallowed.")
+  public boolean incompatibleDisallowLegacyJavaProvider;
+
+  @Option(
       name = "incompatible_disallow_legacy_javainfo",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
@@ -662,6 +674,7 @@
             .incompatibleDisableDepsetItems(incompatibleDisableDepsetItems)
             .incompatibleDisallowDictPlus(incompatibleDisallowDictPlus)
             .incompatibleDisallowEmptyGlob(incompatibleDisallowEmptyGlob)
+            .incompatibleDisallowLegacyJavaProvider(incompatibleDisallowLegacyJavaProvider)
             .incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd)
             .incompatibleDisallowStructProviderSyntax(incompatibleDisallowStructProviderSyntax)
             .incompatibleDisallowRuleExecutionPlatformConstraintsAllowed(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 402cf80..8d2ff78 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -43,6 +43,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeInfo;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
@@ -236,6 +237,8 @@
 
     ruleBuilder
         .setFilesToBuild(filesToBuild)
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
         .addNativeDeclaredProvider(
             new AndroidNativeLibsInfo(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index 6dbb2e0..929e281 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -64,6 +64,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaTargetAttributes;
 import com.google.devtools.build.lib.rules.java.JavaUtil;
@@ -742,6 +743,8 @@
 
     return builder
         .setFilesToBuild(filesToBuild)
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addNativeDeclaredProvider(javaInfo)
         .addProvider(RunfilesProvider.class, RunfilesProvider.simple(getRunfiles()))
         .addNativeDeclaredProvider(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
index 87ea160..8614bf1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -58,6 +58,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuntimeClasspathProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeInfo;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaTargetAttributes;
@@ -370,6 +371,8 @@
 
     return builder
         .setFilesToBuild(filesToBuild)
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addNativeDeclaredProvider(javaInfo)
         .addProvider(
             RunfilesProvider.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index d2b6b07..1c47f8f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -109,6 +109,7 @@
         "JavaRunfilesProvider.java",
         "JavaRuntimeInfo.java",
         "JavaSemantics.java",
+        "JavaSkylarkApiProvider.java",
         "JavaSkylarkCommon.java",
         "JavaSourceInfoProvider.java",
         "JavaSourceJarsProvider.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index b259030..de9adbf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -476,6 +476,8 @@
     return builder
         .setFilesToBuild(filesToBuild)
         .addNativeDeclaredProvider(javaInfo)
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .add(RunfilesProvider.class, runfilesProvider)
         // The executable to run (below) may be different from the executable for runfiles (the one
         // we create the runfiles support object with). On Linux they are the same (it's the same
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 b63b96e..7e39c09 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
@@ -152,6 +152,8 @@
 
     return ruleBuilder
         .setFilesToBuild(filesToBuild)
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addNativeDeclaredProvider(javaInfo)
         .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
         .add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
index 5322c1e..ecdb68c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
@@ -207,6 +207,8 @@
             .build();
 
     builder
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addProvider(
             RunfilesProvider.simple(
                 JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink)))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
new file mode 100644
index 0000000..a6f467f
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
@@ -0,0 +1,163 @@
+// Copyright 2015 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 com.google.devtools.build.lib.rules.java;
+
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
+import com.google.devtools.build.lib.analysis.skylark.SkylarkApiProvider;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skylarkbuildapi.java.JavaSkylarkApiProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics;
+import javax.annotation.Nullable;
+
+/**
+ * A class that exposes the Java providers to Skylark. It is intended to provide a simple and stable
+ * interface for Skylark users.
+ */
+@AutoCodec
+public final class JavaSkylarkApiProvider extends SkylarkApiProvider
+    implements JavaSkylarkApiProviderApi<Artifact> {
+  /** The name of the field in Skylark used to access this class. */
+  public static final String NAME = "java";
+  /** The name of the field in Skylark proto aspects used to access this class. */
+  public static final SkylarkProviderIdentifier SKYLARK_NAME =
+      SkylarkProviderIdentifier.forLegacy(NAME);
+
+  @Nullable private final TransitiveInfoProviderMap transitiveInfoProviderMap;
+
+  /**
+   * Creates a Skylark API provider that reads information from its associated target's providers.
+   */
+  public static JavaSkylarkApiProvider fromRuleContext() {
+    return new JavaSkylarkApiProvider(null);
+  }
+
+  /** Creates a Skylark API provider that reads information from an explicit provider map. */
+  @AutoCodec.Instantiator
+  public static JavaSkylarkApiProvider fromProviderMap(
+      TransitiveInfoProviderMap transitiveInfoProviderMap) {
+    return new JavaSkylarkApiProvider(transitiveInfoProviderMap);
+  }
+
+  private JavaSkylarkApiProvider(TransitiveInfoProviderMap transitiveInfoProviderMap) {
+    this.transitiveInfoProviderMap = transitiveInfoProviderMap;
+  }
+
+  @Nullable
+  private <P extends TransitiveInfoProvider> P getProvider(Class<P> provider) {
+    if (transitiveInfoProviderMap != null) {
+      return JavaInfo.getProvider(provider, transitiveInfoProviderMap);
+    }
+    return JavaInfo.getProvider(provider, getInfo());
+  }
+
+  @Override
+  public NestedSet<Artifact> getSourceJars(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    JavaSourceJarsProvider sourceJarsProvider = getProvider(JavaSourceJarsProvider.class);
+    if (sourceJarsProvider == null) {
+      return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+    }
+    return NestedSetBuilder.wrap(Order.STABLE_ORDER, sourceJarsProvider.getSourceJars());
+  }
+
+  @Override
+  public NestedSet<Artifact> getTransitiveDeps(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    JavaCompilationArgsProvider compilationArgsProvider =
+        getProvider(JavaCompilationArgsProvider.class);
+    if (compilationArgsProvider == null) {
+      return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+    }
+    return compilationArgsProvider.getTransitiveCompileTimeJars();
+  }
+
+  @Override
+  public NestedSet<Artifact> getTransitiveRuntimeDeps(
+      Location location, StarlarkSemantics semantics) throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    JavaCompilationArgsProvider compilationArgsProvider =
+        getProvider(JavaCompilationArgsProvider.class);
+    if (compilationArgsProvider == null) {
+      return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+    }
+    return compilationArgsProvider.getRuntimeJars();
+  }
+
+  @Override
+  public NestedSet<Artifact> getTransitiveSourceJars(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    JavaSourceJarsProvider sourceJarsProvider = getProvider(JavaSourceJarsProvider.class);
+    if (sourceJarsProvider == null) {
+      return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+    }
+    return sourceJarsProvider.getTransitiveSourceJars();
+  }
+
+  @Override
+  public JavaRuleOutputJarsProvider getOutputJars(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    return getProvider(JavaRuleOutputJarsProvider.class);
+  }
+
+  @Override
+  public NestedSet<Label> getTransitiveExports(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    JavaExportsProvider exportsProvider = getProvider(JavaExportsProvider.class);
+    if (exportsProvider != null) {
+      return exportsProvider.getTransitiveExports();
+    } else {
+      return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
+    }
+  }
+
+  @Override
+  public JavaGenJarsProvider getGenJarsProvider(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    return getProvider(JavaGenJarsProvider.class);
+  }
+
+  @Override
+  public JavaCompilationInfoProvider getCompilationInfoProvider(
+      Location location, StarlarkSemantics semantics) throws EvalException {
+    checkLegacyJavaProviderFlag(location, semantics);
+    return getProvider(JavaCompilationInfoProvider.class);
+  }
+
+  private void checkLegacyJavaProviderFlag(Location location, StarlarkSemantics semantics)
+      throws EvalException {
+    if (semantics.incompatibleDisallowLegacyJavaProvider()) {
+      throw new EvalException(
+          location,
+          "The .java provider is deprecated and cannot be used "
+              + "when --incompatible_disallow_legacy_java_provider is set. "
+              + "Please migrate to the JavaInfo Starlark provider.");
+    }
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index a0e41e2..da89907 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -48,6 +48,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
 import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder.Exports;
@@ -114,6 +115,7 @@
             .advertiseProvider(JavaProtoLibraryAspectProvider.class)
             .advertiseProvider(
                 ImmutableList.of(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())))
+            .advertiseProvider(ImmutableList.of(JavaSkylarkApiProvider.SKYLARK_NAME))
             .add(
                 attr(JavaProtoAspectCommon.LITE_PROTO_TOOLCHAIN_ATTR, LABEL)
                     .mandatoryNativeProviders(
@@ -231,7 +233,9 @@
       aspect.addNativeDeclaredProvider(
           createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
 
+      JavaSkylarkApiProvider skylarkApiProvider = JavaSkylarkApiProvider.fromRuleContext();
       aspect
+          .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, skylarkApiProvider)
           .addNativeDeclaredProvider(javaInfo.build())
           .addProvider(
               new JavaProtoLibraryAspectProvider(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
index 10e8c92..64edf43 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
@@ -39,6 +39,7 @@
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRunfilesProvider;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaStrictCompilationArgsProvider;
 import com.google.devtools.build.lib.rules.java.ProguardLibrary;
@@ -101,6 +102,8 @@
 
     return new RuleConfiguredTargetBuilder(ruleContext)
         .setFilesToBuild(filesToBuild.build())
+        .addSkylarkTransitiveInfo(
+            JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
         .addProvider(RunfilesProvider.withData(Runfiles.EMPTY, runfiles))
         .addOutputGroup(OutputGroupInfo.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
         .addNativeDeclaredProvider(getJavaLiteRuntimeSpec(ruleContext))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index 1e2f6a6..93ac592 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -48,6 +48,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
 import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder.Exports;
@@ -123,6 +124,7 @@
             .advertiseProvider(JavaProtoLibraryAspectProvider.class)
             .advertiseProvider(
                 ImmutableList.of(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())))
+            .advertiseProvider(ImmutableList.of(JavaSkylarkApiProvider.SKYLARK_NAME))
             .add(
                 attr(JavaProtoAspectCommon.SPEED_PROTO_TOOLCHAIN_ATTR, LABEL)
                     // TODO(carmi): reinstate mandatoryNativeProviders(ProtoLangToolchainProvider)
@@ -250,7 +252,9 @@
       javaInfo.addProvider(JavaCompilationArgsProvider.class, generatedCompilationArgsProvider);
       aspect.addNativeDeclaredProvider(
           createCcLinkingInfo(ruleContext, aspectCommon.getProtoRuntimeDeps()));
+      JavaSkylarkApiProvider javaSkylarkApiProvider = JavaSkylarkApiProvider.fromRuleContext();
       aspect
+          .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, javaSkylarkApiProvider)
           .addNativeDeclaredProvider(javaInfo.build())
           .addProvider(
               new JavaProtoLibraryAspectProvider(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
index 0f1f508..b33a91b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java
@@ -36,6 +36,7 @@
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRunfilesProvider;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaStrictCompilationArgsProvider;
 
@@ -98,6 +99,8 @@
     RuleConfiguredTargetBuilder result =
         new RuleConfiguredTargetBuilder(ruleContext)
             .setFilesToBuild(filesToBuild.build())
+            .addSkylarkTransitiveInfo(
+                JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
             .addProvider(RunfilesProvider.withData(Runfiles.EMPTY, runfiles))
             .addOutputGroup(
                 OutputGroupInfo.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java
new file mode 100644
index 0000000..39725a8
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaSkylarkApiProviderApi.java
@@ -0,0 +1,117 @@
+// 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 com.google.devtools.build.lib.skylarkbuildapi.java;
+
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.StarlarkSemantics;
+
+/**
+ * Provides access to information about Java rules. Every Java-related target provides
+ * this struct, accessible as a java field on a Target.
+ */
+@SkylarkModule(
+    name = "JavaSkylarkApiProvider",
+    title = "java",
+    category = SkylarkModuleCategory.PROVIDER,
+    doc =
+        "Provides access to information about Java rules. Every Java-related target provides "
+            + "this struct, accessible as a <code>java</code> field on a "
+            + "<a href=\"Target.html\">target</a>."
+)
+public interface JavaSkylarkApiProviderApi<FileT extends FileApi> {
+
+  @SkylarkCallable(
+      name = "source_jars",
+      doc = "Returns the Jars containing Java source files for the target.",
+      useStarlarkSemantics = true,
+      useLocation = true,
+      structField = true)
+  public NestedSet<FileT> getSourceJars(Location location, StarlarkSemantics semantics)
+      throws EvalException;
+
+  @SkylarkCallable(
+      name = "transitive_deps",
+      doc = "Returns the transitive set of Jars required to build the target.",
+      useStarlarkSemantics = true,
+      useLocation = true,
+      structField = true)
+  public NestedSet<FileT> getTransitiveDeps(Location location, StarlarkSemantics semantics)
+      throws EvalException;
+
+  @SkylarkCallable(
+      name = "transitive_runtime_deps",
+      doc = "Returns the transitive set of Jars required on the target's runtime classpath.",
+      useStarlarkSemantics = true,
+      useLocation = true,
+      structField = true)
+  public NestedSet<FileT> getTransitiveRuntimeDeps(Location location, StarlarkSemantics semantics)
+      throws EvalException;
+
+  @SkylarkCallable(
+      name = "transitive_source_jars",
+      doc =
+          "Returns the Jars containing Java source files for the target and all of its transitive "
+              + "dependencies.",
+      useStarlarkSemantics = true,
+      useLocation = true,
+      structField = true)
+  public NestedSet<FileT> getTransitiveSourceJars(Location location, StarlarkSemantics semantics)
+      throws EvalException;
+
+  @SkylarkCallable(
+      name = "outputs",
+      doc = "Returns information about outputs of this Java target.",
+      useStarlarkSemantics = true,
+      useLocation = true,
+      structField = true)
+  public JavaRuleOutputJarsProviderApi<?> getOutputJars(
+      Location location, StarlarkSemantics semantics) throws EvalException;
+
+  @SkylarkCallable(
+      name = "transitive_exports",
+      structField = true,
+      useStarlarkSemantics = true,
+      useLocation = true,
+      doc = "Returns transitive set of labels that are being exported from this rule.")
+  public NestedSet<Label> getTransitiveExports(Location location, StarlarkSemantics semantics)
+      throws EvalException;
+
+  @SkylarkCallable(
+      name = "annotation_processing",
+      structField = true,
+      allowReturnNones = true,
+      useStarlarkSemantics = true,
+      useLocation = true,
+      doc = "Returns information about annotation processing for this Java target.")
+  public JavaAnnotationProcessingApi<?> getGenJarsProvider(
+      Location location, StarlarkSemantics semantics) throws EvalException;
+
+  @SkylarkCallable(
+      name = "compilation_info",
+      structField = true,
+      allowReturnNones = true,
+      useStarlarkSemantics = true,
+      useLocation = true,
+      doc = "Returns compilation information for this Java target.")
+  public JavaCompilationInfoProviderApi<?> getCompilationInfoProvider(
+      Location location, StarlarkSemantics semantics) throws EvalException;
+}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index b83a03b..96b54a4 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -157,6 +157,7 @@
 
   public abstract boolean incompatibleDisallowEmptyGlob();
 
+  public abstract boolean incompatibleDisallowLegacyJavaProvider();
 
   public abstract boolean incompatibleDisallowOldStyleArgsAdd();
 
@@ -259,6 +260,7 @@
           .incompatibleDisableDepsetItems(false)
           .incompatibleDisallowDictPlus(true)
           .incompatibleDisallowEmptyGlob(false)
+          .incompatibleDisallowLegacyJavaProvider(true)
           .incompatibleDisallowOldStyleArgsAdd(true)
           .incompatibleDisallowRuleExecutionPlatformConstraintsAllowed(true)
           .incompatibleDisallowStructProviderSyntax(false)
@@ -326,6 +328,8 @@
 
     public abstract Builder incompatibleDisallowEmptyGlob(boolean value);
 
+    public abstract Builder incompatibleDisallowLegacyJavaProvider(boolean value);
+
     public abstract Builder incompatibleDisallowOldStyleArgsAdd(boolean value);
 
     public abstract Builder incompatibleDisallowRuleExecutionPlatformConstraintsAllowed(
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index ad23ea24c..a9be5d5 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -140,6 +140,7 @@
         "--incompatible_disable_third_party_license_checking=" + rand.nextBoolean(),
         "--incompatible_disallow_dict_plus=" + rand.nextBoolean(),
         "--incompatible_disallow_empty_glob=" + rand.nextBoolean(),
+        "--incompatible_disallow_legacy_java_provider=" + rand.nextBoolean(),
         "--incompatible_disallow_old_style_args_add=" + rand.nextBoolean(),
         "--incompatible_disallow_rule_execution_platform_constraints_allowed=" + rand.nextBoolean(),
         "--incompatible_disallow_struct_provider_syntax=" + rand.nextBoolean(),
@@ -192,6 +193,7 @@
         .incompatibleDisableThirdPartyLicenseChecking(rand.nextBoolean())
         .incompatibleDisallowDictPlus(rand.nextBoolean())
         .incompatibleDisallowEmptyGlob(rand.nextBoolean())
+        .incompatibleDisallowLegacyJavaProvider(rand.nextBoolean())
         .incompatibleDisallowOldStyleArgsAdd(rand.nextBoolean())
         .incompatibleDisallowRuleExecutionPlatformConstraintsAllowed(rand.nextBoolean())
         .incompatibleDisallowStructProviderSyntax(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index 4e8cdb0..6ac932d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -1161,6 +1161,29 @@
   }
 
   @Test
+  public void testSkylarkApiProviderReexported() throws Exception {
+    scratch.file(
+        "java/test/extension.bzl",
+        "def impl(ctx):",
+        "   dep_java = ctx.attr.dep.java",
+        "   return struct(java = dep_java)",
+        "my_rule = rule(impl, attrs = { ",
+        "  'dep' : attr.label(), ",
+        "})");
+    scratch.file(
+        "java/test/BUILD",
+        "load(':extension.bzl', 'my_rule')",
+        "java_library(name = 'jl', srcs = ['Jl.java'])",
+        "my_rule(name = 'my', dep = ':jl')");
+    // Now, get that information and ensure it is equal to what the jl java_library
+    // was presenting
+    ConfiguredTarget myConfiguredTarget = getConfiguredTarget("//java/test:my");
+    ConfiguredTarget javaLibraryTarget = getConfiguredTarget("//java/test:jl");
+
+    assertThat(myConfiguredTarget.get("java")).isSameInstanceAs(javaLibraryTarget.get("java"));
+  }
+
+  @Test
   public void javaProviderExposedOnJavaLibrary() throws Exception {
     scratch.file(
         "foo/extension.bzl",
@@ -1998,6 +2021,31 @@
   }
 
   @Test
+  public void testDisallowLegacyJavaProvider() throws Exception {
+    setSkylarkSemanticsOptions("--incompatible_disallow_legacy_java_provider");
+    scratch.file(
+        "foo/custom_rule.bzl",
+        "def _impl(ctx):",
+        "  ctx.attr.java_lib.java.source_jars",
+        "java_custom_library = rule(",
+        "  implementation = _impl,",
+        "  attrs = {",
+        "    'java_lib': attr.label(),",
+        "   },",
+        ")");
+
+    scratch.file(
+        "foo/BUILD",
+        "load(':custom_rule.bzl', 'java_custom_library')",
+        "java_library(name = 'java_lib', srcs = ['java/A.java'])",
+        "java_custom_library(name = 'custom_lib', java_lib = ':java_lib')");
+    checkError(
+        "//foo:custom_lib",
+        "The .java provider is deprecated and cannot be used "
+            + "when --incompatible_disallow_legacy_java_provider is set.");
+  }
+
+  @Test
   public void testConfiguredTargetHostJavabase() throws Exception {
     writeBuildFileForJavaToolchain();
 
