diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
index 56b371e..fd7f696 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
@@ -147,14 +147,6 @@
   public boolean experimentalEnableAndroidMigrationApis;
 
   @Option(
-      name = "experimental_enable_javanativelibraryinfo",
-      defaultValue = "true",
-      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
-      effectTags = OptionEffectTag.BUILD_FILE_SEMANTICS,
-      help = "If set to false, disables the APIs for JavaNativeLibraryInfo.")
-  public boolean experimentalEnableJavaNativeLibraryInfo;
-
-  @Option(
       name = "experimental_google_legacy_api",
       defaultValue = "false",
       documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
@@ -643,8 +635,6 @@
             .set(EXPERIMENTAL_BUILTINS_INJECTION_OVERRIDE, experimentalBuiltinsInjectionOverride)
             .setBool(
                 EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS, experimentalEnableAndroidMigrationApis)
-            .setBool(
-                EXPERIMENTAL_ENABLE_JAVANATIVELIBRARYINFO, experimentalEnableJavaNativeLibraryInfo)
             .setBool(EXPERIMENTAL_GOOGLE_LEGACY_API, experimentalGoogleLegacyApi)
             .setBool(EXPERIMENTAL_NINJA_ACTIONS, experimentalNinjaActions)
             .setBool(EXPERIMENTAL_PLATFORMS_API, experimentalPlatformsApi)
@@ -712,8 +702,6 @@
       "-experimental_disable_external_package";
   public static final String EXPERIMENTAL_ENABLE_ANDROID_MIGRATION_APIS =
       "-experimental_enable_android_migration_apis";
-  public static final String EXPERIMENTAL_ENABLE_JAVANATIVELIBRARYINFO =
-      "+experimental_enable_javanativelibraryinfo";
   public static final String EXPERIMENTAL_EXEC_GROUPS = "-experimental_exec_groups";
   public static final String EXPERIMENTAL_GOOGLE_LEGACY_API = "-experimental_google_legacy_api";
   public static final String EXPERIMENTAL_NINJA_ACTIONS = "-experimental_ninja_actions";
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 504ef0c..3399a06 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
@@ -138,7 +138,6 @@
         "JavaInfo.java",
         "JavaInfoBuildHelper.java",
         "JavaLibraryHelper.java",
-        "JavaNativeLibraryInfo.java",
         "JavaOptions.java",
         "JavaPackageConfigurationProvider.java",
         "JavaPluginInfo.java",
@@ -153,7 +152,6 @@
         "JavaToolchainTool.java",
         "JavaUtil.java",
         "MessageBundleInfo.java",
-        "NativeLibraryNestedSetBuilder.java",
         "OneVersionCheckActionBuilder.java",
         "ResourceJarActionBuilder.java",
         "SingleJarActionBuilder.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 a77b2e6..3e2fbb9 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
@@ -690,8 +690,6 @@
     NestedSet<LibraryToLink> linkerInputs =
         NestedSetBuilder.fromNestedSets(
                 Streams.concat(
-                        AnalysisUtils.getProviders(deps, JavaNativeLibraryInfo.PROVIDER).stream()
-                            .map(JavaNativeLibraryInfo::getTransitiveJavaNativeLibraries),
                         JavaInfo.getProvidersFromListOfTargets(JavaCcInfoProvider.class, deps)
                             .stream()
                             .map(JavaCcInfoProvider::getCcInfo)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index cc3ed40..208f7cb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -46,7 +46,6 @@
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.rules.cpp.CcInfo;
 import com.google.devtools.build.lib.rules.cpp.CcNativeLibraryInfo;
-import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
 import com.google.devtools.build.lib.rules.java.JavaPluginInfo.JavaPluginData;
 import com.google.devtools.build.lib.util.FileTypeSet;
@@ -309,21 +308,6 @@
   }
 
   /**
-   * Returns transitive Java native libraries.
-   *
-   * @see JavaNativeLibraryInfo
-   */
-  protected NestedSet<LibraryToLink> collectTransitiveJavaNativeLibraries() {
-    NativeLibraryNestedSetBuilder builder = new NativeLibraryNestedSetBuilder();
-    builder.addJavaTargets(targetsTreatedAsDeps(ClasspathType.BOTH));
-
-    if (ruleContext.getRule().isAttrDefined("data", BuildType.LABEL_LIST)) {
-      builder.addJavaTargets(ruleContext.getPrerequisites("data"));
-    }
-    return builder.build();
-  }
-
-  /**
    * Collects transitive source jars for the current rule.
    *
    * @param targetSrcJars The source jar artifacts corresponding to the output of the current rule.
@@ -724,11 +708,6 @@
         CcNativeLibraryInfo.merge(
             Streams.concat(
                     Stream.of(mergedCcInfo.getCcNativeLibraryInfo()),
-                    AnalysisUtils.getProviders(
-                            Iterables.concat(deps, data), JavaNativeLibraryInfo.PROVIDER)
-                        .stream()
-                        .map(JavaNativeLibraryInfo::getTransitiveJavaNativeLibraries)
-                        .map(CcNativeLibraryInfo::new),
                     JavaInfo.getProvidersFromListOfTargets(JavaCcInfoProvider.class, data).stream()
                         .map(JavaCcInfoProvider::getCcInfo)
                         .map(CcInfo::getCcNativeLibraryInfo),
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 cf9429e..cfbb405 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
@@ -31,7 +31,6 @@
 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.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.JavaOutput;
 import java.util.LinkedHashSet;
 import java.util.Set;
@@ -79,8 +78,6 @@
     JavaCompilationArtifacts javaArtifacts = collectJavaArtifacts(jars, interfaceJars);
     common.setJavaCompilationArtifacts(javaArtifacts);
 
-    NestedSet<LibraryToLink> transitiveJavaNativeLibraries =
-        common.collectTransitiveJavaNativeLibraries();
     boolean neverLink = JavaCommon.isNeverLink(ruleContext);
     JavaCompilationArgsProvider javaCompilationArgs =
         common.collectJavaCompilationArgs(neverLink, false);
@@ -149,7 +146,6 @@
         .setFilesToBuild(filesToBuild)
         .addNativeDeclaredProvider(javaInfo)
         .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles))
-        .addNativeDeclaredProvider(new JavaNativeLibraryInfo(transitiveJavaNativeLibraries))
         .addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
         .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars)
         .addOutputGroup(
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 8d42bf41..26e70cd 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
@@ -26,7 +26,6 @@
 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.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider.ClasspathType;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.JavaOutput;
 import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
@@ -150,8 +149,6 @@
 
     JavaCompilationArgsProvider javaCompilationArgs =
         common.collectJavaCompilationArgs(neverLink, /* srcLessDepsExport= */ false);
-    NestedSet<LibraryToLink> transitiveJavaNativeLibraries =
-        common.collectTransitiveJavaNativeLibraries();
 
     RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext);
 
@@ -199,7 +196,6 @@
             RunfilesProvider.simple(
                 JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink)))
         .setFilesToBuild(filesToBuild)
-        .addNativeDeclaredProvider(new JavaNativeLibraryInfo(transitiveJavaNativeLibraries))
         .addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
         .addNativeDeclaredProvider(javaInfo)
         .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
deleted file mode 100644
index c8dd570..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryInfo.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2014 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.collect.nestedset.Depset;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.BuiltinProvider;
-import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
-import com.google.devtools.build.lib.rules.cpp.LtoBackendArtifacts;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.starlarkbuildapi.java.JavaNativeLibraryInfoApi;
-import net.starlark.java.eval.EvalException;
-
-/**
- * A target that provides native libraries in the transitive closure of its deps that are needed for
- * executing Java code.
- */
-@Immutable
-@AutoCodec
-public final class JavaNativeLibraryInfo extends NativeInfo
-    implements JavaNativeLibraryInfoApi<Artifact, LtoBackendArtifacts, LibraryToLink> {
-
-  public static final Provider PROVIDER = new Provider();
-
-  private final NestedSet<LibraryToLink> transitiveJavaNativeLibraries;
-
-  public JavaNativeLibraryInfo(NestedSet<LibraryToLink> transitiveJavaNativeLibraries) {
-    this.transitiveJavaNativeLibraries = transitiveJavaNativeLibraries;
-  }
-
-  @Override
-  public Provider getProvider() {
-    return PROVIDER;
-  }
-
-  /**
-   * Collects native libraries in the transitive closure of its deps that are needed for executing
-   * Java code.
-   */
-  NestedSet<LibraryToLink> getTransitiveJavaNativeLibraries() {
-    return transitiveJavaNativeLibraries;
-  }
-
-  @Override
-  public Depset /*<LibraryToLink>*/ getTransitiveJavaNativeLibrariesForStarlark() {
-    return Depset.of(LibraryToLink.TYPE, transitiveJavaNativeLibraries);
-  }
-
-  public static JavaNativeLibraryInfo merge(Iterable<JavaNativeLibraryInfo> deps) {
-    NestedSetBuilder<LibraryToLink> transitiveSourceJars = NestedSetBuilder.stableOrder();
-
-    for (JavaNativeLibraryInfo wrapper : deps) {
-      transitiveSourceJars.addTransitive(wrapper.getTransitiveJavaNativeLibraries());
-    }
-    return new JavaNativeLibraryInfo(transitiveSourceJars.build());
-  }
-
-  /** Provider class for {@link JavaNativeLibraryInfo} objects. */
-  public static class Provider extends BuiltinProvider<JavaNativeLibraryInfo>
-      implements JavaNativeLibraryInfoApi.Provider<Artifact, LtoBackendArtifacts, LibraryToLink> {
-
-    private Provider() {
-      super(NAME, JavaNativeLibraryInfo.class);
-    }
-
-    public String getName() {
-      return NAME;
-    }
-
-    @Override
-    public JavaNativeLibraryInfo create(Depset transitiveLibraries)
-        throws EvalException {
-      return new JavaNativeLibraryInfo(
-          NestedSetBuilder.<LibraryToLink>stableOrder()
-              .addTransitive(
-                  Depset.cast(transitiveLibraries, LibraryToLink.class, "transitive_libraries"))
-              .build());
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java
deleted file mode 100644
index a18da6b..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/NativeLibraryNestedSetBuilder.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2014 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.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.rules.cpp.CcInfo;
-import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
-
-/** A builder that helps construct nested sets of native libraries. */
-public final class NativeLibraryNestedSetBuilder {
-
-  private final NestedSetBuilder<LibraryToLink> builder = NestedSetBuilder.linkOrder();
-
-  /** Build a nested set of native libraries. */
-  public NestedSet<LibraryToLink> build() {
-    return builder.build();
-  }
-
-  /** Include specified artifacts as native libraries in the nested set. */
-  public NativeLibraryNestedSetBuilder addAll(Iterable<LibraryToLink> deps) {
-    builder.addAll(deps);
-    return this;
-  }
-
-  /** Include native libraries of specified dependencies into the nested set. */
-  public NativeLibraryNestedSetBuilder addJavaTargets(
-      Iterable<? extends TransitiveInfoCollection> deps) {
-    for (TransitiveInfoCollection dep : deps) {
-      addJavaTarget(dep);
-    }
-    return this;
-  }
-
-  /** Include native Java libraries of a specified target into the nested set. */
-  public NativeLibraryNestedSetBuilder addJavaTarget(TransitiveInfoCollection dep) {
-    JavaNativeLibraryInfo javaProvider = dep.get(JavaNativeLibraryInfo.PROVIDER);
-    if (javaProvider != null) {
-      builder.addTransitive(javaProvider.getTransitiveJavaNativeLibraries());
-      return this;
-    }
-
-    CcInfo ccProvider = dep.get(CcInfo.PROVIDER);
-    if (ccProvider != null && ccProvider.getCcNativeLibraryInfo() != null) {
-      builder.addTransitive(ccProvider.getCcNativeLibraryInfo().getTransitiveCcNativeLibraries());
-      return this;
-    }
-
-    return this;
-  }
-
-  /** Include native C/C++ libraries of specified dependencies into the nested set. */
-  public NativeLibraryNestedSetBuilder addCcTargets(
-      Iterable<? extends TransitiveInfoCollection> deps) {
-    for (TransitiveInfoCollection dep : deps) {
-      addCcTarget(dep);
-    }
-    return this;
-  }
-
-  /** Include native Java libraries of a specified target into the nested set. */
-  private void addCcTarget(TransitiveInfoCollection dep) {
-    CcInfo ccProvider = dep.get(CcInfo.PROVIDER);
-    if (ccProvider != null && ccProvider.getCcNativeLibraryInfo() != null) {
-      builder.addTransitive(ccProvider.getCcNativeLibraryInfo().getTransitiveCcNativeLibraries());
-    }
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
deleted file mode 100644
index da609e7..0000000
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaNativeLibraryInfoApi.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2020 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.starlarkbuildapi.java;
-
-import com.google.devtools.build.docgen.annot.DocCategory;
-import com.google.devtools.build.docgen.annot.StarlarkConstructor;
-import com.google.devtools.build.lib.collect.nestedset.Depset;
-import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
-import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
-import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
-import com.google.devtools.build.lib.starlarkbuildapi.cpp.LibraryToLinkApi;
-import com.google.devtools.build.lib.starlarkbuildapi.cpp.LtoBackendArtifactsApi;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.ParamType;
-import net.starlark.java.annot.StarlarkBuiltin;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.eval.EvalException;
-
-/** A target that provides C++ {@link LibraryToLinkApi}s to be linked into Java targets. */
-@StarlarkBuiltin(
-    name = "JavaNativeLibraryInfo",
-    doc =
-        "Do not use this module. It is intended for migration purposes only. If you depend on it, "
-            + "you will be broken when it is removed."
-            + "Information about the C++ libraries to be linked into Java targets.",
-    documented = true,
-    category = DocCategory.PROVIDER)
-public interface JavaNativeLibraryInfoApi<
-        FileT extends FileApi,
-        LtoBackendArtifactsT extends LtoBackendArtifactsApi<FileT>,
-        LibraryToLinkT extends LibraryToLinkApi<FileT, LtoBackendArtifactsT>>
-    extends StructApi {
-  /** Name of this info object. */
-  String NAME = "JavaNativeLibraryInfo";
-
-  /** Returns the cc linking info */
-  @StarlarkMethod(
-      name = "transitive_libraries",
-      structField = true,
-      doc = "Returns the set of transitive LibraryToLink objects.",
-      documented = true,
-      enableOnlyWithFlag = BuildLanguageOptions.EXPERIMENTAL_ENABLE_JAVANATIVELIBRARYINFO)
-  Depset /*<LibraryToLinkT>*/ getTransitiveJavaNativeLibrariesForStarlark();
-
-  /** The provider implementing this can construct the JavaNativeLibraryInfo provider. */
-  @StarlarkBuiltin(
-      name = "Provider",
-      doc =
-          "Do not use this module. It is intended for migration purposes only. If you depend on "
-              + "it, you will be broken when it is removed.",
-      documented = false)
-  interface Provider<
-          FileT extends FileApi,
-          LtoBackendArtifactsT extends LtoBackendArtifactsApi<FileT>,
-          LibraryToLinkT extends LibraryToLinkApi<FileT, LtoBackendArtifactsT>>
-      extends ProviderApi {
-
-    @StarlarkMethod(
-        name = NAME,
-        doc = "The <code>JavaNativeLibraryInfo</code> constructor.",
-        documented = true,
-        enableOnlyWithFlag = BuildLanguageOptions.EXPERIMENTAL_ENABLE_JAVANATIVELIBRARYINFO,
-        parameters = {
-          @Param(
-              name = "transitive_libraries",
-              doc = "The transitive set of LibraryToLink providers.",
-              positional = true,
-              named = false,
-              allowedTypes = {@ParamType(type = Depset.class, generic1 = LibraryToLinkApi.class)}),
-        },
-        selfCall = true)
-    @StarlarkConstructor
-    JavaNativeLibraryInfoApi<FileT, LtoBackendArtifactsT, LibraryToLinkT> create(
-        Depset transitiveLibraries) throws EvalException;
-  }
-}
