3.2RC1 classnotfoundexception resolving cached task results using gradle daemon

Gradle Version: 3.1, 3.2RC1
Operating System and JVM version: windows 10, Java 8
Is this a regression? YES: worked in 3.0, 2.xx

There seems to be a regression related to the gradle daemon or task result caching and classpath of separate projects:
There are two separate projects, all .gradle folders removed, I call gradlew on both folders. The first time the deployment works for both deployments, the second time I call each project again, but the deployment fails for the second project. This effect is repeatable, there seems to be a influence regarding another project on the cached task results or the gradlel daemon.
note: the second project is using the “com.bmuschko:gradle-cargo-plugin:2.2.3” plugin.

I am sorry I could not provide more informations at this stage.


FAILURE: Build failed with an exception.

* What went wrong:
org.gradle.api.UncheckedIOException: Could not read entry 'xxx:deploy' from cache taskArtifacts.bin (yyy\.gradle\3.2-rc-1\taskArtifacts\taskArtifacts.bin).
> Could not read entry 'xxx:deploy' from cache taskArtifacts.bin (yyy\.gradle\3.2-rc-1\taskArtifacts\taskArtifacts.bin).

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
com.google.common.util.concurrent.UncheckedExecutionException: org.gradle.api.UncheckedIOException: Could not read entry ':xxxx:deploy' from cache taskArtifacts.bin (yyy\.gradle\3.2-rc-1\taskArtifacts\taskArtifacts.bin).
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
	at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
	at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4736)
	at org.gradle.api.internal.changedetection.state.InMemoryDecoratedCache.get(InMemoryDecoratedCache.java:51)
	at org.gradle.cache.internal.CrossProcessSynchronizingCache$1.create(CrossProcessSynchronizingCache.java:37)
	at org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess.withFileLock(LockOnDemandCrossProcessCacheAccess.java:81)
	at org.gradle.cache.internal.CrossProcessSynchronizingCache.get(CrossProcessSynchronizingCache.java:34)
	at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.loadPreviousExecutions(CacheBackedTaskHistoryRepository.java:125)
	at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.getHistory(CacheBackedTaskHistoryRepository.java:62)
	at org.gradle.api.internal.changedetection.changes.DefaultTaskArtifactStateRepository.getStateFor(DefaultTaskArtifactStateRepository.java:63)
	at org.gradle.api.internal.changedetection.changes.ShortCircuitTaskArtifactStateRepository.getStateFor(ShortCircuitTaskArtifactStateRepository.java:47)
	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:42)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:233)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:74)
	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:55)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:32)
	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:113)
	at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
	at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
	at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
	at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
	at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:197)
	at org.gradle.internal.Factories$1.create(Factories.java:25)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:194)
	at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:36)
	at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:118)
	at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:112)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
	at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:112)
	at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:98)
	at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:66)
	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:26)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44)
	at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29)
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
	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:47)
	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.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
	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:72)
	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.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:293)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: org.gradle.api.UncheckedIOException: Could not read entry 'xxx:deploy' from cache taskArtifacts.bin (yyy\taskArtifacts\taskArtifacts.bin).
	at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.get(BTreePersistentIndexedCache.java:133)
	at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache$1.create(DefaultMultiProcessSafePersistentIndexedCache.java:38)
	at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.readFile(DefaultFileLockManager.java:159)
	at org.gradle.cache.internal.DefaultCacheAccess$UnitOfWorkFileAccess.readFile(DefaultCacheAccess.java:448)
	at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache.get(DefaultMultiProcessSafePersistentIndexedCache.java:36)
	at org.gradle.cache.internal.AsyncCacheAccessDecoratedCache$1.create(AsyncCacheAccessDecoratedCache.java:37)
	at org.gradle.cache.internal.CacheAccessWorker$1.call(CacheAccessWorker.java:78)
	at org.gradle.cache.internal.CacheAccessWorker$AsyncCacheAccessFutureTask.run(CacheAccessWorker.java:254)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
	at org.gradle.cache.internal.CacheAccessWorker$2.run(CacheAccessWorker.java:182)
	at org.gradle.internal.Factories$1.create(Factories.java:25)
	at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:179)
	at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:162)
	at org.gradle.cache.internal.CacheAccessWorker.flushOperations(CacheAccessWorker.java:172)
	at org.gradle.cache.internal.CacheAccessWorker.run(CacheAccessWorker.java:142)
	... 2 more
Caused by: java.lang.ClassNotFoundException: com.bmuschko.gradle.cargo.convention.Deployable
	at org.gradle.internal.io.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.java:40)
	at org.gradle.internal.serialize.DefaultSerializer.read(DefaultSerializer.java:45)
	at org.gradle.internal.serialize.MapSerializer.read(MapSerializer.java:37)
	at org.gradle.api.internal.changedetection.state.InputPropertiesSerializer.read(InputPropertiesSerializer.java:35)
	at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$LazyTaskExecution$TaskExecutionSnapshotSerializer.read(CacheBackedTaskHistoryRepository.java:356)
	at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$TaskExecutionListSerializer.read(CacheBackedTaskHistoryRepository.java:186)
	at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$TaskExecutionListSerializer.read(CacheBackedTaskHistoryRepository.java:173)
	at org.gradle.cache.internal.btree.BTreePersistentIndexedCache$DataBlock.getValue(BTreePersistentIndexedCache.java:665)
	at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.get(BTreePersistentIndexedCache.java:125)
	... 16 more

Each gradlew.bat call seems to connect to the same daemon, even if the home directory (and so the used libraries and .gradle folders) are different - this seems to cause the daemon to mess up the classpaths

Connected to daemon DaemonInfo{pid=13560, address=[52eff777-ad65-4ae7-8b55-14e853f732e8 port:58511, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Busy, lastBusy=1477656680753, context=DefaultDaemonContext[uid=9a745d65-85c8-4d0b-850e-3abfcbb1bec6,javaHome=H:\applic\java\jdk1.8.0_77_64,daemonRegistryDir=BBB\.gradle\daemon,pid=13560,idleTimeout=10800000,daemonOpts=-Dfile.encoding=windows-1252,-Duser.country=DE,-Duser.language=de,-Duser.variant]}. Dispatching request Build{id=1ca8d7c6-8dab-4947-bb94-a061c5161784.1, currentDir=DIR-A\workspace\P1}.
Connected to daemon DaemonInfo{pid=13560, address=[52eff777-ad65-4ae7-8b55-14e853f732e8 port:58511, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Idle, lastBusy=1477656701116, context=DefaultDaemonContext[uid=9a745d65-85c8-4d0b-850e-3abfcbb1bec6,javaHome=H:\applic\java\jdk1.8.0_77_64,daemonRegistryDir=BBB\.gradle\daemon,pid=13560,idleTimeout=10800000,daemonOpts=-Dfile.encoding=windows-1252,-Duser.country=DE,-Duser.language=de,-Duser.variant]}. Dispatching request Build{id=4449b010-d6f6-4104-855b-a78c309165cb.1, currentDir=DIR-B\workspace\P2}.
Connected to daemon DaemonInfo{pid=13560, address=[52eff777-ad65-4ae7-8b55-14e853f732e8 port:58511, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Idle, lastBusy=1477656930412, context=DefaultDaemonContext[uid=9a745d65-85c8-4d0b-850e-3abfcbb1bec6,javaHome=H:\applic\java\jdk1.8.0_77_64,daemonRegistryDir=BBB\.gradle\daemon,pid=13560,idleTimeout=10800000,daemonOpts=-Dfile.encoding=windows-1252,-Duser.country=DE,-Duser.language=de,-Duser.variant]}. Dispatching request Build{id=1049d88c-c837-4afc-b042-00f4e4bdb71c.1, currentDir=DIR-A\workspace\P1}.
Connected to daemon DaemonInfo{pid=13560, address=[52eff777-ad65-4ae7-8b55-14e853f732e8 port:58511, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Idle, lastBusy=1477656956486, context=DefaultDaemonContext[uid=9a745d65-85c8-4d0b-850e-3abfcbb1bec6,javaHome=H:\applic\java\jdk1.8.0_77_64,daemonRegistryDir=BBB\.gradle\daemon,pid=13560,idleTimeout=10800000,daemonOpts=-Dfile.encoding=windows-1252,-Duser.country=DE,-Duser.language=de,-Duser.variant]}. Dispatching request Build{id=f8842caa-8597-4f09-9d9a-8dca6a8b444f.1, currentDir=DIR-B\workspace\P2}.

Thanks for reporting the issue. We are looking into it right now. If you could provide us with a sample to reproduce the problem or a build scan that would be very helpful.

I am sorry, I can not provide any sample “soon” due to time constraints. Regarding the build scan I am currently not sure I am allowed to provide one (commercial project). I will try to isolate the problem in the next or the week after.

I already found a workaround for me: If a custom JVM argument (-Xms…) is passed to one of the gradlew.bat build calls the build works, so it seems to be releated to the shared daemon.
root/P1/gradlew.bat

root/P2/gradlew.bat

P2 is using the plugin, P1 is not. Call order is
(clear both .gradle folders)
P1/gradlew.bat something
P2/gradlew.bat deploy
P1/gradlew.bat something (nearly all targets up to date)
P2/gradlew.bat deploy
-> exception

I call these gradlew.bat files from a ant script included in intellij idea - but calling from the command line seems to have the same effect.

Thank you very much for the additional information. We will keep working with this information.

In the meantime, could you tell us a bit more about the project setup:

  • What plugins are applied to each project?
  • Are there any outstanding configuration on any project?
  • Are you using --parallel or --configure-on-demand?
  • Do you have any custom plugins build around your project that may be related?
  • Any init script used?
  • Anything looks fishy in the info logs ( --info)?

Any information regarding the technology used would be really helpful in reproducing this failure.

Thanks,

Daniel

Hello,

(new users can not attach files, should I mail the file somewhere ?)

I finally found a working test case. There are three projects, each of them is required for this test. The key point is P3 is including (apply from: ‘shared.gradle’) a file with the class imports, if the included file is directly copied to the build.gradle of P3 the build succeeds.

The zip file contains the test case for windows, call test.bat from the command line. The build should fail with


Total time: 1.142 secs
Stopped 0 compiler daemon(s).
Received result Failure[value=org.gradle.initialization.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Could not read entry ':deploy' from cache taskArtifacts.bin (...\P3\.gradle\3.1\taskArtifacts\taskArtifacts.bin).] from daemon DaemonInfo{pid=11748, address=[c36c7611-ee13-4b52-b692-8d53bea3a3d1 port:58896, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Idle, lastBusy=1478005237884, context=DefaultDaemonContext[uid=5372efd1-b28b-4905-b3a1-7c98f4f029ec,javaHome=H:\applic\java\jdk1.8.0_31_32,daemonRegistryDir=...\.gradle\daemon,pid=11748,idleTimeout=10800000,daemonOpts=-Dfile.encoding=windows-1252,-Duser.country=DE,-Duser.language=de,-Duser.variant]} (build should be done).

FAILURE: Build failed with an exception.

* What went wrong:
Could not read entry ':deploy' from cache taskArtifacts.bin (...\P3\.gradle\3.1\taskArtifacts\taskArtifacts.bin).
> com.bmuschko.gradle.cargo.convention.Deployable

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.UncheckedIOException: Could not read entry ':deploy' from cache taskArtifacts.bin (...\P3\.gradle\3.1\taskArtifacts\taskArtifacts.bin).
        at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.get(BTreePersistentIndexedCache.java:134)
        at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache$1.create(DefaultMultiProcessSafePersistentIndexedCache.java:37)
        at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.readFile(DefaultFileLockManager.java:159)
        at org.gradle.cache.internal.DefaultCacheAccess$UnitOfWorkFileAccess.readFile(DefaultCacheAccess.java:396)
        at org.gradle.cache.internal.DefaultMultiProcessSafePersistentIndexedCache.get(DefaultMultiProcessSafePersistentIndexedCache.java:35)
        at org.gradle.api.internal.changedetection.state.InMemoryTaskArtifactCache$1.get(InMemoryTaskArtifactCache.java:95)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$2.create(CacheBackedTaskHistoryRepository.java:131)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$2.create(CacheBackedTaskHistoryRepository.java:125)
        at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:192)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:102)
        at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory.java:183)
        at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:56)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.loadPreviousExecutions(CacheBackedTaskHistoryRepository.java:125)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.getHistory(CacheBackedTaskHistoryRepository.java:59)
        at org.gradle.api.internal.changedetection.changes.DefaultTaskArtifactStateRepository.getStateFor(DefaultTaskArtifactStateRepository.java:66)
        at org.gradle.api.internal.changedetection.changes.ShortCircuitTaskArtifactStateRepository.getStateFor(ShortCircuitTaskArtifactStateRepository.java:47)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:49)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:233)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:74)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:55)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:32)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:113)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
        at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:186)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:183)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:33)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:112)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:106)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:92)
        at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:66)
        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:26)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:79)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:51)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:59)
        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:47)
        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.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
        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:72)
        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.HintGCAfterBuild.execute(HintGCAfterBuild.java:44)
        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:293)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.ClassNotFoundException: com.bmuschko.gradle.cargo.convention.Deployable
        at org.gradle.internal.io.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.java:40)
        at org.gradle.internal.serialize.DefaultSerializer.read(DefaultSerializer.java:45)
        at org.gradle.internal.serialize.MapSerializer.read(MapSerializer.java:37)
        at org.gradle.api.internal.changedetection.state.InputPropertiesSerializer.read(InputPropertiesSerializer.java:35)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$LazyTaskExecution$LazyTaskExecutionSerializer.read(CacheBackedTaskHistoryRepository.java:329)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$TaskExecutionListSerializer.read(CacheBackedTaskHistoryRepository.java:186)
        at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$TaskExecutionListSerializer.read(CacheBackedTaskHistoryRepository.java:172)
        at org.gradle.cache.internal.btree.BTreePersistentIndexedCache$DataBlock.getValue(BTreePersistentIndexedCache.java:659)
        at org.gradle.cache.internal.btree.BTreePersistentIndexedCache.get(BTreePersistentIndexedCache.java:126)

I was just looking at that. Do you think you can push the code in a github repo that I could pull?

Hello,

it should be available here now:

Note: due to the deploy task a local tomcat is required - probably this can also be stripped but I have not tried yet,

Thanks a lot for the code sample, I will work on reproducing this problem. In the meantime, I opened a Github issue to track the progress on this bug.