Skip to content

Commit d283077

Browse files
committed
Use the application class classloader. Potential fix for #10244
1 parent bb44ff3 commit d283077

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

grails-core/src/main/groovy/grails/boot/config/tools/ClassPathScanner.groovy

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class ClassPathScanner {
9090
Set<Class> scan(Class applicationClass, Collection<String> packageNames, Class<? extends Annotation> annotationFilter) {
9191
ResourcePatternResolver resourcePatternResolver = new GrailsClasspathIgnoringResourceResolver(applicationClass)
9292

93-
return scan(resourcePatternResolver,packageNames, { String annotation ->
93+
return scan(applicationClass.getClassLoader(), resourcePatternResolver, packageNames, { String annotation ->
9494
annotationFilter.name == annotation
9595
})
9696
}
@@ -104,19 +104,31 @@ class ClassPathScanner {
104104
*/
105105
Set<Class> scan(Class applicationClass, Collection<String> packageNames, Closure<Boolean> annotationFilter = { String annotation -> annotation.startsWith('grails.') }) {
106106
ResourcePatternResolver resourcePatternResolver = new GrailsClasspathIgnoringResourceResolver(applicationClass)
107-
108-
return scan(resourcePatternResolver,packageNames, annotationFilter)
107+
return scan(applicationClass.getClassLoader(), resourcePatternResolver,packageNames, annotationFilter)
109108
}
110109

111110
/**
112-
* Scans for classes oin the given package names
111+
* Scans for classes in the given package names
113112
*
114113
* @param resourcePatternResolver The resolver to use
115114
* @param packageNames The package names
116115
* @return The found classes
117116
*/
118117
Set<Class> scan(ResourcePatternResolver resourcePatternResolver, Collection<String> packageNames, Closure<Boolean> annotationFilter = { String annotation -> annotation.startsWith('grails.') }) {
119118
ClassLoader classLoader = resourcePatternResolver.getClassLoader()
119+
return scan(classLoader, resourcePatternResolver, packageNames, annotationFilter)
120+
}
121+
122+
/**
123+
* Scans for classes in the given package names
124+
*
125+
* @param classLoader The classloader to use to load classes
126+
* @param resourcePatternResolver The resolver
127+
* @param packageNames The package names
128+
* @param annotationFilter The filter
129+
* @return The classes
130+
*/
131+
Set<Class> scan(ClassLoader classLoader, ResourcePatternResolver resourcePatternResolver, Collection<String> packageNames, Closure<Boolean> annotationFilter = { String annotation -> annotation.startsWith('grails.') }) {
120132
Set<Class> classes = []
121133
for (String pkg in packageNames.unique()) {
122134
if (pkg == null) continue

grails-core/src/test/groovy/grails/boot/config/tools/ClassPathScannerSpec.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ClassPathScannerSpec extends Specification {
1515
then:"the results are correct"
1616
results.size() == 1
1717
results.contains(Foo)
18+
Foo.classLoader == Application.classLoader
1819
}
1920

2021
void "Test classpath scanner with application"() {

0 commit comments

Comments
 (0)