The current classloader structure in surefire does not isolate surefire from changes to surefire in itself. This means an interface change in most private interfaces and classes can break the build of surefire itself.
This is due to the classloader structure systemclassloader<-testclassloader<-providerclassloader, where a modified surefire immediately becomes effective by being loaded in testclassloader.
This issue will be fixed by making the following structure:
Pardon the ascii graphics but it seems like jira does not allow me to draw systemclassloader<-testframeworkclassloader as one common root