From ac7d2a7cbd90f4c948529791a6609298fb0919a4 Mon Sep 17 00:00:00 2001 From: jupblb Date: Thu, 2 Jul 2026 16:23:31 +0200 Subject: [PATCH 1/2] Support centrally declared repositories in Gradle plugin (#847) --- .../scip_java/gradle/ScipGradlePlugin.java | 16 ++++++++++++++-- .../src/test/kotlin/tests/GradleBuildToolTest.kt | 12 ++++++++++++ .../gradle/centralized-repos/build.gradle | 6 ++++++ .../gradle/centralized-repos/settings.gradle | 7 +++++++ .../centralized-repos/src/main/java/Example.java | 7 +++++++ 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 scip-java/src/test/resources/fixtures/gradle/centralized-repos/build.gradle create mode 100644 scip-java/src/test/resources/fixtures/gradle/centralized-repos/settings.gradle create mode 100644 scip-java/src/test/resources/fixtures/gradle/centralized-repos/src/main/java/Example.java 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..9b8fbec0 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,19 @@ 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) { + // The build declares repositories centrally in settings.gradle with + // RepositoriesMode.FAIL_ON_PROJECT_REPOS, which makes any project-level + // repository an error (issue #847). Repositories are guaranteed to be + // declared in settings in that mode, so the injection is unnecessary. + 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..11359fb6 100644 --- a/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt +++ b/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt @@ -91,6 +91,18 @@ class GradleBuildToolTest : BuildToolHarness() { ) ) add(checkGradleBuild("basic", "gradle/basic", expectedScipFiles = 2)) + // Regression test: builds that centralize repository declarations in + // settings.gradle with RepositoriesMode.FAIL_ON_PROJECT_REPOS reject any + // project-level repository, so the plugin must not inject Maven + // Central/local into the project. + // 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")); + } +} From e2c62d7567a87e15fbcbdd0af4c6e5d2aa9e3331 Mon Sep 17 00:00:00 2001 From: jupblb Date: Thu, 2 Jul 2026 16:30:19 +0200 Subject: [PATCH 2/2] Fix formatting and shorten comments --- .../scip_code/scip_java/gradle/ScipGradlePlugin.java | 9 +++------ .../src/test/kotlin/tests/GradleBuildToolTest.kt | 12 +++--------- 2 files changed, 6 insertions(+), 15 deletions(-) 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 9b8fbec0..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 @@ -25,14 +25,11 @@ private void configureProject(Project project) { project.getRepositories().add(project.getRepositories().mavenCentral()); project.getRepositories().add(project.getRepositories().mavenLocal()); } catch (InvalidUserCodeException exc) { - // The build declares repositories centrally in settings.gradle with - // RepositoriesMode.FAIL_ON_PROJECT_REPOS, which makes any project-level - // repository an error (issue #847). Repositories are guaranteed to be - // declared in settings in that mode, so the injection is unnecessary. + // 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()); + .info("scip-java: not injecting Maven Central/local repositories: " + exc.getMessage()); } Map extraProperties = diff --git a/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt b/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt index 11359fb6..e2b466e8 100644 --- a/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt +++ b/scip-java/src/test/kotlin/tests/GradleBuildToolTest.kt @@ -91,17 +91,11 @@ class GradleBuildToolTest : BuildToolHarness() { ) ) add(checkGradleBuild("basic", "gradle/basic", expectedScipFiles = 2)) - // Regression test: builds that centralize repository declarations in - // settings.gradle with RepositoriesMode.FAIL_ON_PROJECT_REPOS reject any - // project-level repository, so the plugin must not inject Maven - // Central/local into the project. + // 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, - ) + checkGradleBuild("centralized-repos", "gradle/centralized-repos", expectedScipFiles = 1) ) add( checkGradleBuild(