Add flag to control native maven jar rule deprecation.
Closes #6768.
Relevant to #6799.
PiperOrigin-RevId: 223375698
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
index bb15e60..b79cd4a 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
@@ -24,7 +24,9 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.Path;
@@ -96,6 +98,24 @@
public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory,
BlazeDirectories directories, Environment env, Map<String, String> markerData)
throws RepositoryFunctionException, InterruptedException {
+
+ // Deprecation in favor of the Starlark rule
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
+ if (skylarkSemantics.incompatibleRemoveNativeMavenJar()) {
+ throw new RepositoryFunctionException(
+ new EvalException(
+ null,
+ "The native maven_jar rule is deprecated."
+ + " See https://docs.bazel.build/versions/master/skylark/"
+ + "backward-compatibility.html#remove-native-maven-jar for migration information."
+ + "\nUse --incompatible_remove_native_maven_jar=false to temporarily continue"
+ + " using the native rule."),
+ Transience.PERSISTENT);
+ }
+
MavenServerValue serverValue = getServer(rule, env);
if (env.valuesMissing()) {
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
index 4b9685b..653a99d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
@@ -477,6 +477,20 @@
public boolean incompatibleRemoveNativeHttpArchive;
@Option(
+ name = "incompatible_remove_native_maven_jar",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.SKYLARK_SEMANTICS,
+ effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
+ metadataTags = {
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+ },
+ help =
+ "If set to true, the native maven_jar rule is disabled; only the Starlark version "
+ + "will be available")
+ public boolean incompatibleRemoveNativeMavenJar;
+
+ @Option(
name = "incompatible_static_name_resolution",
defaultValue = "true",
documentationCategory = OptionDocumentationCategory.SKYLARK_SEMANTICS,
@@ -566,6 +580,7 @@
.incompatibleRangeType(incompatibleRangeType)
.incompatibleRemoveNativeGitRepository(incompatibleRemoveNativeGitRepository)
.incompatibleRemoveNativeHttpArchive(incompatibleRemoveNativeHttpArchive)
+ .incompatibleRemoveNativeMavenJar(incompatibleRemoveNativeMavenJar)
.incompatibleStaticNameResolution(incompatibleStaticNameResolution)
.incompatibleStricArgumentOrdering(incompatibleStricArgumentOrdering)
.incompatibleStringIsNotIterable(incompatibleStringIsNotIterable)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index b61c217..ff92277 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -176,6 +176,8 @@
public abstract boolean incompatibleRemoveNativeHttpArchive();
+ public abstract boolean incompatibleRemoveNativeMavenJar();
+
public abstract boolean incompatibleStaticNameResolution();
public abstract boolean incompatibleStricArgumentOrdering();
@@ -231,6 +233,7 @@
.incompatibleRangeType(true)
.incompatibleRemoveNativeGitRepository(true)
.incompatibleRemoveNativeHttpArchive(true)
+ .incompatibleRemoveNativeMavenJar(false)
.incompatibleStaticNameResolution(true)
.incompatibleStricArgumentOrdering(false)
.incompatibleStringIsNotIterable(false)
@@ -306,6 +309,8 @@
public abstract Builder incompatibleRemoveNativeHttpArchive(boolean value);
+ public abstract Builder incompatibleRemoveNativeMavenJar(boolean value);
+
public abstract Builder incompatibleStaticNameResolution(boolean value);
public abstract Builder incompatibleStricArgumentOrdering(boolean value);