diff --git a/subprojects/core/src/main/java/org/gradle/initialization/ScriptEvaluatingSettingsProcessor.java b/subprojects/core/src/main/java/org/gradle/initialization/ScriptEvaluatingSettingsProcessor.java index a3c90932f6a6..50b435d73331 100644 --- a/subprojects/core/src/main/java/org/gradle/initialization/ScriptEvaluatingSettingsProcessor.java +++ b/subprojects/core/src/main/java/org/gradle/initialization/ScriptEvaluatingSettingsProcessor.java @@ -65,7 +65,6 @@ public SettingsInternal process(GradleInternal gradle, gradle.getBuildListenerBroadcaster().beforeSettings(settings); applySettingsScript(settingsScript, settings); - settings.preventFromFurtherMutation(); LOGGER.debug("Timing: Processing settings took: {}", settingsProcessingClock.getElapsed()); return settings; } diff --git a/subprojects/core/src/main/java/org/gradle/initialization/SettingsEvaluatedCallbackFiringSettingsProcessor.java b/subprojects/core/src/main/java/org/gradle/initialization/SettingsEvaluatedCallbackFiringSettingsProcessor.java index abdeba98e659..44613e4a062b 100644 --- a/subprojects/core/src/main/java/org/gradle/initialization/SettingsEvaluatedCallbackFiringSettingsProcessor.java +++ b/subprojects/core/src/main/java/org/gradle/initialization/SettingsEvaluatedCallbackFiringSettingsProcessor.java @@ -33,6 +33,7 @@ public SettingsEvaluatedCallbackFiringSettingsProcessor(SettingsProcessor delega public SettingsInternal process(GradleInternal gradle, SettingsLocation settingsLocation, ClassLoaderScope buildRootClassLoaderScope, StartParameter startParameter) { SettingsInternal settings = delegate.process(gradle, settingsLocation, buildRootClassLoaderScope, startParameter); gradle.getBuildListenerBroadcaster().settingsEvaluated(settings); + settings.preventFromFurtherMutation(); return settings; } } diff --git a/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/RepositoriesDeclaredInSettingsIntegrationTest.groovy b/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/RepositoriesDeclaredInSettingsIntegrationTest.groovy index 702bc84e0b32..6bcaacb8d740 100644 --- a/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/RepositoriesDeclaredInSettingsIntegrationTest.groovy +++ b/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/RepositoriesDeclaredInSettingsIntegrationTest.groovy @@ -762,6 +762,41 @@ You can figure out how project repositories are declared by configuring your bui See https://docs.gradle.org/${GradleVersion.current().version}/userguide/declaring_repositories.html#sub:fail_build_on_project_repositories for details.""")) } + @Issue("https://github.com/gradle/gradle/issues/15772") + def "can add settings repositories in an init script"() { + given: + repository { + 'org:module:1.0'() + } + + buildFile << """ + dependencies { + conf 'org:module:1.0' + } + """ + + file("init.gradle") << """ +settingsEvaluated { + it.dependencyResolutionManagement { + repositories { + maven { url '/doesnt/matter'} + } + } +} +""" + + when: + repositoryInteractions { + 'org:module:1.0' { + expectResolve() + } + } + executer.usingInitScript(file("init.gradle")) + + then: + succeeds ':checkDeps' + } + void withSettingsPlugin() { file("settings-plugin/build.gradle") << """ plugins { diff --git a/subprojects/integ-test/src/integTest/groovy/org/gradle/integtests/GroovyProjectIntegrationTest.groovy b/subprojects/integ-test/src/integTest/groovy/org/gradle/integtests/GroovyProjectIntegrationTest.groovy index c95cddb8c0a8..afd489cdfadf 100644 --- a/subprojects/integ-test/src/integTest/groovy/org/gradle/integtests/GroovyProjectIntegrationTest.groovy +++ b/subprojects/integ-test/src/integTest/groovy/org/gradle/integtests/GroovyProjectIntegrationTest.groovy @@ -35,4 +35,34 @@ class GroovyProjectIntegrationTest extends AbstractIntegrationSpec { then: file("build/libs/javaOnly.jar").exists() } + + def "supports central repository declaration"() { + given: + buildFile << """ +plugins { + id 'groovy' +} + +dependencies { + implementation 'org.codehaus.groovy:groovy-all:2.5.13' +} +""" + settingsFile << """ +rootProject.name = 'groovyCompilation' +dependencyResolutionManagement { + repositories { + ${jcenterRepository()} + } +} +""" + and: + file('src/main/groovy/Test.groovy') << """ +class Test { } +""" + when: + succeeds 'compileGroovy' + + then: + executedAndNotSkipped(':compileGroovy') + } } diff --git a/subprojects/plugins/src/main/java/org/gradle/api/tasks/GroovyRuntime.java b/subprojects/plugins/src/main/java/org/gradle/api/tasks/GroovyRuntime.java index 8a87d11ff291..5ba396825118 100644 --- a/subprojects/plugins/src/main/java/org/gradle/api/tasks/GroovyRuntime.java +++ b/subprojects/plugins/src/main/java/org/gradle/api/tasks/GroovyRuntime.java @@ -94,10 +94,6 @@ public FileCollection createDelegate() { return project.getLayout().files(groovyJar.getFile()); } - if (project.getRepositories().isEmpty()) { - throw new GradleException("Cannot infer Groovy class path because no repository is declared for the project."); - } - String notation = groovyJar.getDependencyNotation(); List dependencies = Lists.newArrayList(); // project.getDependencies().create(String) seems to be the only feasible way to create a Dependency with a classifier diff --git a/subprojects/scala/src/integTest/groovy/org/gradle/integtests/ScalaProjectIntegrationTest.groovy b/subprojects/scala/src/integTest/groovy/org/gradle/integtests/ScalaProjectIntegrationTest.groovy index cfd8d15ac26e..fa301dde8ca4 100644 --- a/subprojects/scala/src/integTest/groovy/org/gradle/integtests/ScalaProjectIntegrationTest.groovy +++ b/subprojects/scala/src/integTest/groovy/org/gradle/integtests/ScalaProjectIntegrationTest.groovy @@ -37,4 +37,33 @@ class ScalaProjectIntegrationTest extends AbstractIntegrationSpec { succeeds "build" file("build/libs/javaOnly.jar").assertExists() } + + def "supports central repository declaration"() { + given: + buildFile << """ +plugins { + id 'scala' +} +dependencies { + implementation 'org.scala-lang:scala-library:2.11.12' +} +""" + settingsFile << """ +rootProject.name = 'scalaCompilation' +dependencyResolutionManagement { + repositories { + ${jcenterRepository()} + } +} +""" + and: + file('src/main/scala/Test.scala') << """ +class Test { } +""" + when: + succeeds 'compileScala' + + then: + executedAndNotSkipped(':compileScala') + } } diff --git a/subprojects/scala/src/main/java/org/gradle/api/tasks/ScalaRuntime.java b/subprojects/scala/src/main/java/org/gradle/api/tasks/ScalaRuntime.java index e03a42798e16..1adc9e79d12a 100644 --- a/subprojects/scala/src/main/java/org/gradle/api/tasks/ScalaRuntime.java +++ b/subprojects/scala/src/main/java/org/gradle/api/tasks/ScalaRuntime.java @@ -84,10 +84,6 @@ public String getDisplayName() { @Override public FileCollection createDelegate() { - if (project.getRepositories().isEmpty()) { - throw new GradleException(String.format("Cannot infer Scala class path because no repository is declared in %s", project)); - } - File scalaLibraryJar = findScalaJar(classpath, "library"); if (scalaLibraryJar == null) { throw new GradleException(String.format("Cannot infer Scala class path because no Scala library Jar was found. " diff --git a/subprojects/scala/src/test/groovy/org/gradle/api/tasks/ScalaRuntimeTest.groovy b/subprojects/scala/src/test/groovy/org/gradle/api/tasks/ScalaRuntimeTest.groovy index c87faef0f650..b1127f436e4c 100644 --- a/subprojects/scala/src/test/groovy/org/gradle/api/tasks/ScalaRuntimeTest.groovy +++ b/subprojects/scala/src/test/groovy/org/gradle/api/tasks/ScalaRuntimeTest.groovy @@ -84,7 +84,8 @@ class ScalaRuntimeTest extends AbstractProjectBuilderSpec { then: GradleException e = thrown() - e.message == "Cannot infer Scala class path because no repository is declared in $project" + e.message == "Could not resolve all files for configuration ':detachedConfiguration1'." + e.cause.message.startsWith("Cannot resolve external dependency org.scala-lang:scala-compiler:2.10.1 because no repositories are defined.") } def "inference fails if 'scalaTools' configuration is empty and no Scala library Jar is found on class path"() {