What went wrong:
A problem occurred evaluating script.
Cannot add deferred configuration for project :
What this code does is apply any found local user overrides of plugin configuration.
The root project’s build.gradle: apply from: "${gradleToolsDir}/plugin-config-user.gradle"
The plugin-config-user.gradle looks for a user file and applies it if found:
for (file in ["${userHome}/usersettings.gradle","${projectDir}/usersettings.gradle"]) {
def userSettings = new File(file)
if (userSettings.exists()) {
apply from: userSettings
}
}
My local usersettings.gradle currently has all overrides commented out. When I un-comment something then the build runs fine. Its a very common case for us to have local override files in place but we comment/un-comment as we need and in most cases the file’s content will be commented out.
As the file contains comments I can’t check for an empty file and its a git ignored file so often developers forget its even there.
I looked at the release notes for 2.4 but couldn’t see anything related, but this is going to be quite frustrating having to manage/support amongst developers who use this technique and have this file available but commented out.
Did something change or can I configure something else to support this scenario?
This will be a bug. It would be extremely helpful if you could put together a little example that exhibits the same problem. If we have that, we’ll be able to get a fix in pretty quickly and a new nightly build for you to try.
I’ve added 2 example projects: https://github.com/hallatech/gradle24-1 - this is a working example with a jcenter plugin https://github.com/hallatech/gradle24-2 - this is a failed example using one of our internal plugins. You won’t be able to actually run it because I’ve not included the maven credentials, but I’ve added the stacktrace in stacktrace.log
So it seems its related to my internal plugin, but the stack trace is not showing any of that plugin’s code.
If I run gradle build it fails on the usersettings.gradle or gradle build -Penv=ci it will fail for the same reason on the empty buildtools/gradle/env/ci.gradle
Heres the full output as requested. If this still doesn’t help, ping me privately and I can give you the credentials.
hallatech@Hallatechs-MacBook-Pro~/Documents/workspace-spindrift/gradle24-2$ g --full-stacktrace -Dorg.gradle.trace.deferred.project.configuration=true
applying user override: /Users/hallatech/Documents/workspace-spindrift/gradle24-2/usersettings.gradle
What went wrong:
A problem occurred evaluating script.
Cannot add deferred configuration for project :
Try:
Run with --info or --debug option to get more log output.
Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating script.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:76)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$1.run(DefaultScriptPluginFactory.java:148)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:156)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:102)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:36)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:62)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:136)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:46)
at org.gradle.api.plugins.PluginAware$apply.call(Unknown Source)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34)
at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
at build_cp7h6drw5z8m3xr5qfgbtn3y8.run(/Users/hallatech/Documents/workspace-spindrift/gradle24-2/build.gradle:53)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:74)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$1.run(DefaultScriptPluginFactory.java:148)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:156)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:483)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:86)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:129)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:71)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.IllegalStateException: Cannot add deferred configuration for project :
at org.gradle.api.internal.project.DeferredProjectConfiguration.add(DeferredProjectConfiguration.java:46)
at org.gradle.api.internal.project.AbstractProject.addDeferredConfiguration(AbstractProject.java:977)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:154)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:102)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:36)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:62)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:136)
at org.gradle.groovy.scripts.DefaultScript.apply(DefaultScript.java:104)
at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
at plugin_config_user_2v90irlsicvmhk69azo2uki84.run(/Users/hallatech/Documents/workspace-spindrift/gradle24-2/buildtools/gradle/plugin-config-user.gradle:13)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:74)
… 61 more
Caused by: java.lang.Exception: Project ‘:’ deferred configuration fired
at org.gradle.api.internal.project.DeferredProjectConfiguration.fire(DeferredProjectConfiguration.java:56)
at org.gradle.api.internal.project.AbstractProject.fireDeferredConfiguration(AbstractProject.java:982)
at org.gradle.api.internal.tasks.DefaultTaskContainer.discoverTasks(DefaultTaskContainer.java:202)
at org.gradle.api.internal.project.DefaultProjectAccessListener.evaluateProjectAndDiscoverTasks(DefaultProjectAccessListener.java:33)
at org.gradle.api.internal.project.DefaultProjectAccessListener.beforeRequestingTaskByPath(DefaultProjectAccessListener.java:24)
at org.gradle.api.internal.project.AbstractProject$3.execute(AbstractProject.java:587)
at org.gradle.api.internal.project.AbstractProject$3.execute(AbstractProject.java:585)
at org.gradle.api.internal.project.AbstractProject.getTasksByName(AbstractProject.java:598)
at org.gradle.api.Project$getTasksByName$4.call(Unknown Source)
at com.spindrift.gradle.project.GlobalCommonTasksPlugin.apply(GlobalCommonTasksPlugin.groovy:42)
at com.spindrift.gradle.plugins.DatabasePlugin.super$3$apply(DatabasePlugin.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1206)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130)
at com.spindrift.gradle.plugins.DatabasePlugin.apply(DatabasePlugin.groovy:64)
at com.spindrift.gradle.plugins.DatabasePlugin.apply(DatabasePlugin.groovy)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginApplicator.applyImperative(ImperativeOnlyPluginApplicator.java:35)
at org.gradle.api.internal.plugins.RuleBasedPluginApplicator.applyImperative(RuleBasedPluginApplicator.java:43)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:141)
at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:109)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:113)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:36)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:80)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:136)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:46)
at org.gradle.api.plugins.PluginAware$apply.call(Unknown Source)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:34)
at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
at build_cp7h6drw5z8m3xr5qfgbtn3y8.run(/Users/hallatech/Documents/workspace-spindrift/gradle24-2/build.gradle:42)
… 50 more
Commenting that out now shows in the stacktrace the same line number (i.e. the next line). So probably the getTasksByName is no longer applicable ?
How the plugins are structured is that there are a number of common tasks for each plugin. These are added to a base plugin. What that does is check first whether those tasks have actually been applied and if not apply them. So it ensures there is only 1 attempt to create these common tasks no matter how many of the plugins are applied that share that common base. The super method is like this:
abstract class GlobalCommonTasksPlugin extends SpindriftBasePlugin<Project> {
static final String ARGS_TASK="args";
static final String SHOW_PROPERTIES_TASK="showProperties";
static final String SHOW_TASK="show";
static final String HOWTO_TASK="howto";
/* (non-Javadoc)
* @see org.gradle.api.Plugin#apply(java.lang.Object)
*/
public void apply(Project project) {
setResourceBundleName("com.spindrift.gradle.plugins.resources.CommonTasksPluginResources")
//As this is a base plugin ensure its tasks are only applied once
// project.logger.debug "project.getTasksByName(ARGS_TASK,false)=${project},${project.getTasksByName(ARGS_TASK,false)}"
if (!project.rootProject.getTasksByName(ARGS_TASK,false)) {
addArgs(project.rootProject,ARGS_TASK)
}
if (!project.rootProject.getTasksByName(SHOW_PROPERTIES_TASK,false)) {
addShowProperties(project.rootProject,SHOW_PROPERTIES_TASK)
}
if (!project.rootProject.getTasksByName(SHOW_TASK,false)) {
addShow(project.rootProject,SHOW_TASK)
}
if (!project.rootProject.getTasksByName(HOWTO_TASK,false)) {
addHowto(project.rootProject,HOWTO_TASK)
}
}
....
}
I see what the problem is now and am working on a fix.
You can change your code to get around this and it will still work with older versions. Change you usage of project.getTasksByName() to project.tasks.findByName().
Great thanks! I’ve made the suggested changes to the base plugin and it runs fine across 3 gradle versions:
Example using a 20 project build. -x check used to eliminate some custom checks that weren’t subject to up-to-date processing