diff --git a/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java b/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java index 3a89786c..964a31bb 100644 --- a/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java +++ b/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java @@ -133,7 +133,13 @@ protected void getClasspathList(List result) { for (String entry : additionalClasspathList) { boolean mustBeDirectory = false; - if (entry.endsWith("*")) { + boolean recursive = false; + + if (entry.endsWith("**")) { + entry = entry.substring(0, entry.length() - 2); + mustBeDirectory = true; + recursive = true; + } else if (entry.endsWith("*")) { entry = entry.substring(0, entry.length() - 1); mustBeDirectory = true; } @@ -143,12 +149,17 @@ protected void getClasspathList(List result) { continue; } if (file.isDirectory()) { - for (File child : file.listFiles()) { - if (!child.getName().endsWith(".jar") || !child.isFile()) { - continue; + if (recursive) { + addJarsRecursively(file, result); + } else { + for (File child : file.listFiles()) { + if (!child.getName().endsWith(".jar") || !child.isFile()) { + continue; + } + result.add(child.getPath()); } - result.add(child.getPath()); } + } else if (!mustBeDirectory && file.isFile()) { if (file.getName().endsWith(".jar")) { result.add(entry); @@ -157,6 +168,20 @@ protected void getClasspathList(List result) { } } + private void addJarsRecursively(File directory, List classpathList) { + if (directory == null || !directory.exists() || !directory.isDirectory()) { + return; + } + + for (File child : directory.listFiles()) { + if (child.isDirectory()) { + addJarsRecursively(child, classpathList); + } else if (child.getName().endsWith(".jar")) { + classpathList.add(child.getPath()); + } + } + } + protected void addDirectoryToCompilationUnit(Path dirPath, GroovyLSCompilationUnit compilationUnit, FileContentsTracker fileContentsTracker, Set changedUris) { try {