NoClassDefFoundError TabFolderLayout usign SVN Subversive in 2024-12 upgrade
Summary
The bug occurred after Eclipse automatically updated from version 2024-09 to 2024-12.
The root SVN preference page would not open, instead throwing the exception shown in the stack trace.
I initially thought the error was due to the upgrade from an earlier version, and so installed a clean copy of Eclipse 2024-12 using the latest available installer. Everything worked until I installed SVN from the Marketplace, at which point the exception was thrown again, several times (because I had left the Synchronize perspective open.
I then downloaded and installed a clean copy of Eclipse 2024-09, including SVN. Everything works perfectly (and I have disabled automatic updates!)
Stacktrace
java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/eclipse/compare/internal/TabFolderLayout at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.acquireSVNProxy(SVNRepositoryLocation.java:632) at org.eclipse.team.svn.core.operation.local.RemoteStatusOperation.runImpl(RemoteStatusOperation.java:152) at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:82) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104) at org.eclipse.team.svn.core.operation.CompositeOperation.runImpl(CompositeOperation.java:99) at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:82) at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:40) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90) at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.findChanges(AbstractSVNSubscriber.java:386) at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber$UpdateStatusOperation2.run(AbstractSVNSubscriber.java:430) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doSubTask(ProgressMonitorUtility.java:118) at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:156) at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:151) at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriberUpdateStatusOperation.runImpl(AbstractSVNSubscriber.java:428) at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:82) at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:40) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90) at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:81) at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.refresh(AbstractSVNSubscriber.java:243) at org.eclipse.team.svn.core.synchronize.UpdateSubscriber.refresh(UpdateSubscriber.java:75) at org.eclipse.team.core.subscribers.Subscriber.refresh(Subscriber.java:471) at org.eclipse.team.core.subscribers.SubscriberMergeContext.refresh(SubscriberMergeContext.java:88) at org.eclipse.team.core.mapping.provider.SynchronizationContext.refresh(SynchronizationContext.java:105) at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.doRefresh(RefreshModelParticipantJob.java:81) at org.eclipse.team.internal.ui.synchronize.RefreshParticipantJob.run(RefreshParticipantJob.java:332) at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.run(RefreshModelParticipantJob.java:136) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.lang.NoClassDefFoundError: org/eclipse/compare/internal/TabFolderLayout at org.eclipse.team.svn.ui.UIOptionProvider.getCredentialsPrompt(UIOptionProvider.java:48) at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.newProxyInstance(SVNRepositoryLocation.java:848) at org.eclipse.team.svn.core.svnstorage.SVNRepositoryLocation.acquireSVNProxy(SVNRepositoryLocation.java:614) ... 28 more Caused by: java.lang.ClassNotFoundException: org.eclipse.compare.internal.TabFolderLayout cannot be found by org.eclipse.team.svn.ui_4.8.0 at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:562) at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:557) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:434) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:174) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528) ... 31 more
Steps to reproduce
Upgrade to Eclipse 2024-12 and try to use any SVN subversive functionality, eg, commit, update, open SVN Configuration Tab, etc.
Expected change
Avoid java.lang.NoClassDefFoundError: org/eclipse/compare/internal/TabFolderLayout
Affected versions
- Eclipse Version: 2024-12
- Subversive Version: 4.8.0
- Subversive Connector Version: svnkit18 6.1.0 SVN/1.10.0 SVNKit/1.10.4
Workaround
Copy the class org.eclipse.compare.internal.TabFolderLayout.class from org.eclipse.compare_3.11.100.v20240810-1416.jar to org.eclipse.compare_3.11.200.v20241024-1455.jar And restart Eclipse