Skip to content

Commit 4853b6f

Browse files
committed
Print error if classes found in default package and avoid scanning default package if not necessary
1 parent e7fe956 commit 4853b6f

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

grails-bootstrap/src/main/groovy/grails/io/ResourceUtils.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class ResourceUtils extends GrailsResourceUtils {
4444
File rootDir = baseDir ? new File(baseDir, "grails-app") : null
4545
Set<String> packageNames = []
4646
if (rootDir?.exists()) {
47+
File[] allFiles = rootDir.listFiles()
4748
rootDir.eachDir { File dir ->
4849
def dirName = dir.name
4950
if (!dir.hidden && !dirName.startsWith('.') && !['conf', 'i18n', 'assets', 'views'].contains(dirName)) {
@@ -78,6 +79,11 @@ class ResourceUtils extends GrailsResourceUtils {
7879

7980
}
8081
}
82+
else {
83+
if(dir.name.endsWith('.groovy') && prefix == "") {
84+
packageNames.add("")
85+
}
86+
}
8187
}
8288
}
8389
}

grails-core/src/main/groovy/grails/boot/config/GrailsAutoConfiguration.groovy

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import java.lang.reflect.Field
3131
*
3232
*/
3333
@CompileStatic
34+
@Slf4j
3435
class GrailsAutoConfiguration implements GrailsApplicationClass, ApplicationContextAware {
3536

3637
private static final String APC_PRIORITY_LIST_FIELD = "APC_PRIORITY_LIST";
@@ -75,15 +76,24 @@ class GrailsAutoConfiguration implements GrailsApplicationClass, ApplicationCont
7576
if(ignoredRootPackages().contains(pkg)) {
7677
continue
7778
}
78-
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
79-
ClassUtils.convertClassNameToResourcePath(pkg) + Settings.CLASS_RESOURCE_PATTERN;
79+
// if it is the default package
80+
if(pkg == "") {
81+
// try the default package in case of a script without recursing into subpackages
82+
log.error("The application defines a Groovy source using the default package. Please move all Groovy sources into a package.")
83+
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "*.class"
84+
classes.addAll scanUsingPattern(pattern, readerFactory)
85+
}
86+
else {
87+
88+
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
89+
ClassUtils.convertClassNameToResourcePath(pkg) + Settings.CLASS_RESOURCE_PATTERN;
90+
91+
92+
classes.addAll scanUsingPattern(pattern, readerFactory)
93+
}
8094

81-
classes.addAll scanUsingPattern(pattern, readerFactory)
8295
}
8396

84-
// try the default package in case of a script without recursing into subpackages
85-
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "*.class"
86-
classes.addAll scanUsingPattern(pattern, readerFactory)
8797

8898
def classLoader = Thread.currentThread().contextClassLoader
8999
for(cls in AbstractGrailsArtefactTransformer.transformedClassNames) {
@@ -224,10 +234,10 @@ class GrailsAutoConfiguration implements GrailsApplicationClass, ApplicationCont
224234

225235
this.rootResource = getURLs()[0]
226236
this.applicationClass = applicationClass
227-
def urlStr = rootResource.toString()
237+
String urlStr = rootResource.toString()
228238
jarDeployed = urlStr.startsWith("jar:")
229239
try {
230-
def withoutBang = new URL("${urlStr.substring(0, urlStr.length() - 2)}/")
240+
URL withoutBang = new URL("${urlStr.substring(0, urlStr.length() - 2)}/")
231241
addURL(withoutBang)
232242

233243
} catch (MalformedURLException e) {

0 commit comments

Comments
 (0)