Details
-
Type:
Improvement
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.4.1, 2.4.2, 2.4.3, 2.5, 2.6, 2.7, 2.7.1, 2.7.2
-
Fix Version/s: 2.8
-
Component/s: classloading
-
Labels:None
-
Complexity:Intermediate
-
Number of attachments :
Description
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:
systemclassloader<-testframeworkclassloader<-testclassloader
systemclassloader<-testframeworkclassloader<-surefireclassloader
Pardon the ascii graphics but it seems like jira does not allow me to draw systemclassloader<-testframeworkclassloader as one common root ![]()
Fixed in r1071421
Please note that the "api" modules and the "booter" module will have to stay backward compatible with the version of surefire that is running the tests. This is a significant improvement since most implementation classes also had to stay backward compatible before this change.
The core of the change is in ClasspathConfiguration, the rest is just cleaning up classpaths and stuff.