The joys of mixing test classes into the system class loader …. 

We're picking up the BootstrapClassLoaderWorker from the version of Gradle 
being used to run the build. It works on CI build because we're using forking 
mode there. There're 2 classes that we need to start the process, and given 
that these are visible to the classes under test (i.e. gradle classes in our 
case), they can never be changed.

They can, however, be given new names. So, we just need to rename 
BootstrapClassLoaderWorker to fix the problem.


On 30/03/2012, at 7:48 AM, Luke Daley wrote:

> 
> On 29/03/2012, at 3:08 PM, Daz DeBoer wrote:
> 
>> Can you provide some more details?
> 
> 
> And take the fun out of it for you? Sure…
> 
> ./gradlew integTest:integTest
> 
> Gives lots of failures like:
> 
> org.gradle.api.internal.LocationAwareException: Execution failed for task 
> ':test'.
>       at 
> org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:85)
>       at 
> org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:112)
>       at 
> org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:78)
>       at 
> org.gradle.integtests.fixtures.InProcessGradleExecuter.doRun(InProcessGradleExecuter.java:136)
>       at 
> org.gradle.integtests.fixtures.InProcessGradleExecuter.doRun(InProcessGradleExecuter.java:68)
>       at 
> org.gradle.integtests.fixtures.AbstractGradleExecuter.run(AbstractGradleExecuter.java:309)
>       at 
> org.gradle.integtests.fixtures.AbstractDelegatingGradleExecuter.doRun(AbstractDelegatingGradleExecuter.java:23)
>       at 
> org.gradle.integtests.fixtures.AbstractGradleExecuter.run(AbstractGradleExecuter.java:309)
>       at 
> org.gradle.integtests.fixtures.AbstractIntegrationSpec.succeeds(AbstractIntegrationSpec.groovy:83)
>       at 
> org.spockframework.util.GroovyRuntimeUtil.invokeMethod(GroovyRuntimeUtil.java:100)
>       at org.gradle.integtests.CustomPluginIntegrationTest.can use java 
> plugin from custom plugin and its integration 
> tests(CustomPluginIntegrationTest.groovy:205)
> Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for 
> task ':test'.
>       at 
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:68)
>       at 
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
>       at 
> org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:34)
>       at 
> org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter$1.run(CacheLockHandlingTaskExecuter.java:34)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess$2.create(DefaultCacheAccess.java:200)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:172)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:198)
>       at 
> org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:111)
>       at 
> org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:83)
>       at 
> org.gradle.api.internal.changedetection.CacheLockHandlingTaskExecuter.execute(CacheLockHandlingTaskExecuter.java:32)
>       at 
> org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:55)
>       at 
> org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
>       at 
> org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:41)
>       at 
> org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
>       at 
> org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52)
>       at 
> org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:42)
>       at 
> org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:247)
>       at 
> org.gradle.execution.DefaultTaskGraphExecuter.executeTask(DefaultTaskGraphExecuter.java:192)
>       at 
> org.gradle.execution.DefaultTaskGraphExecuter.doExecute(DefaultTaskGraphExecuter.java:177)
>       at 
> org.gradle.execution.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:83)
>       at 
> org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:36)
>       at 
> org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
>       at 
> org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
>       at 
> org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
>       at 
> org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExecuter$1.run(TaskCacheLockHandlingBuildExecuter.java:31)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess$1.create(DefaultCacheAccess.java:111)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:126)
>       at 
> org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:109)
>       at 
> org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:103)
>       at 
> org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:79)
>       at 
> org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExecuter.execute(TaskCacheLockHandlingBuildExecuter.java:29)
>       at 
> org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
>       at 
> org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
>       at 
> org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
>       at 
> org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
>       at 
> org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
>       at 
> org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
>       at 
> org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:155)
>       at 
> org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:110)
>       ... 9 more
> Caused by: java.lang.NoSuchMethodError: 
> org.gradle.process.internal.launcher.BootstrapClassLoaderWorker.<init>(Ljava/util/Collection;[B)V
>       at 
> org.gradle.process.internal.child.ApplicationClassesInSystemClassLoaderWorkerFactory.create(ApplicationClassesInSystemClassLoaderWorkerFactory.java:99)
>       at 
> org.gradle.process.internal.DefaultWorkerProcessFactory$DefaultWorkerProcessBuilder.build(DefaultWorkerProcessFactory.java:92)
>       at 
> org.gradle.api.internal.tasks.testing.worker.ForkingTestClassProcessor.processTestClass(ForkingTestClassProcessor.java:62)
>       at 
> org.gradle.api.internal.tasks.testing.processors.RestartEveryNTestClassProcessor.processTestClass(RestartEveryNTestClassProcessor.java:45)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
>       at 
> org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>       at 
> org.gradle.messaging.dispatch.FailureHandlingDispatch.dispatch(FailureHandlingDispatch.java:29)
>       at 
> org.gradle.messaging.dispatch.AsyncDispatch.dispatchMessages(AsyncDispatch.java:132)
>       at 
> org.gradle.messaging.dispatch.AsyncDispatch.access$000(AsyncDispatch.java:33)
>       at 
> org.gradle.messaging.dispatch.AsyncDispatch$1.run(AsyncDispatch.java:72)
>       at 
> org.gradle.messaging.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:680)
> 
> -- 
> Luke Daley
> Principal Engineer, Gradleware 
> http://gradleware.com
> 


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com

Reply via email to