diff --git a/scip-gradle-plugin/src/main/java/org/scip_code/scip_java/gradle/ScipGradlePlugin.java b/scip-gradle-plugin/src/main/java/org/scip_code/scip_java/gradle/ScipGradlePlugin.java index d57413c6..ed223b72 100644 --- a/scip-gradle-plugin/src/main/java/org/scip_code/scip_java/gradle/ScipGradlePlugin.java +++ b/scip-gradle-plugin/src/main/java/org/scip_code/scip_java/gradle/ScipGradlePlugin.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.gradle.api.InvalidUserCodeException; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; @@ -20,8 +21,16 @@ private void configureProject(Project project) { // Inject Maven Central/local so the indexer (and plugins like protobuf that // resolve their own artifacts) can resolve dependencies even when the build // being indexed doesn't declare any repositories of its own. - project.getRepositories().add(project.getRepositories().mavenCentral()); - project.getRepositories().add(project.getRepositories().mavenLocal()); + try { + project.getRepositories().add(project.getRepositories().mavenCentral()); + project.getRepositories().add(project.getRepositories().mavenLocal()); + } catch (InvalidUserCodeException exc) { + // FAIL_ON_PROJECT_REPOS forbids project repositories; they are declared + // in settings instead, so the injection isn't needed (issue #847). + project + .getLogger() + .info("scip-java: not injecting Maven Central/local repositories: " + exc.getMessage()); + } Map extraProperties = project.getExtensions().getExtraProperties().getProperties(); diff --git a/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt b/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt index a643b77f..e2b466e8 100644 --- a/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt +++ b/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt @@ -91,6 +91,12 @@ class GradleBuildToolTest : BuildToolHarness() { ) ) add(checkGradleBuild("basic", "gradle/basic", expectedScipFiles = 2)) + // Regression test: FAIL_ON_PROJECT_REPOS rejects project-level + // repositories, so the plugin must not inject Maven Central/local. + // https://github.com/scip-code/scip-java/issues/847 + add( + checkGradleBuild("centralized-repos", "gradle/centralized-repos", expectedScipFiles = 1) + ) add( checkGradleBuild( "toolchains", diff --git a/scip-java/src/test/resources/fixtures/gradle/centralized-repos/build.gradle b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/build.gradle new file mode 100644 index 00000000..b4e5cb0e --- /dev/null +++ b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/build.gradle @@ -0,0 +1,6 @@ +plugins { + id 'java' +} +dependencies { + implementation 'com.google.guava:guava:31.1-jre' +} diff --git a/scip-java/src/test/resources/fixtures/gradle/centralized-repos/settings.gradle b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/settings.gradle new file mode 100644 index 00000000..dc7ac8a4 --- /dev/null +++ b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/settings.gradle @@ -0,0 +1,7 @@ +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenCentral() + } +} +rootProject.name = 'centralized-repos' diff --git a/scip-java/src/test/resources/fixtures/gradle/centralized-repos/src/main/java/Example.java b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/src/main/java/Example.java new file mode 100644 index 00000000..7530c4ba --- /dev/null +++ b/scip-java/src/test/resources/fixtures/gradle/centralized-repos/src/main/java/Example.java @@ -0,0 +1,7 @@ +import com.google.common.collect.ImmutableList; + +public class Example { + public static void main(String[] args) { + System.out.println(ImmutableList.of("a", "b")); + } +}