Repository: kylin Updated Branches: refs/heads/KYLIN-1971 daf359d38 -> 4a23f171e
minor Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/4a23f171 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/4a23f171 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/4a23f171 Branch: refs/heads/KYLIN-1971 Commit: 4a23f171ec26b9da89c817eaf83159d74cb162e7 Parents: daf359d Author: Yang Li <liy...@apache.org> Authored: Sun Oct 30 19:19:59 2016 +0800 Committer: Yang Li <liy...@apache.org> Committed: Sun Oct 30 19:19:59 2016 +0800 ---------------------------------------------------------------------- .../kylin/common/util/ClasspathScanner.java | 30 ++++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/4a23f171/core-common/src/main/java/org/apache/kylin/common/util/ClasspathScanner.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/util/ClasspathScanner.java b/core-common/src/main/java/org/apache/kylin/common/util/ClasspathScanner.java index 6eeb53a..e7b88a9 100644 --- a/core-common/src/main/java/org/apache/kylin/common/util/ClasspathScanner.java +++ b/core-common/src/main/java/org/apache/kylin/common/util/ClasspathScanner.java @@ -25,6 +25,7 @@ import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; +import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; @@ -41,6 +42,9 @@ public class ClasspathScanner { } System.out.println("----------------------------------------------------------------------------"); + if (args.length == 0) + return; + scanner.scan("", new ResourceVisitor() { public void accept(File dir, String relativeFileName) { check(dir.getAbsolutePath(), relativeFileName.replace('\\', '/')); @@ -104,14 +108,23 @@ public class ClasspathScanner { } static File[] extractRoots(ClassLoader loader, boolean recursive) { - ArrayList<File> roots = new ArrayList(); - - do { - if (loader instanceof URLClassLoader) { - URL[] urls = ((URLClassLoader) loader).getURLs(); - for (int i = 0; i < urls.length; i++) { + List<ClassLoader> loaders = new ArrayList<>(); + while (loader != null) { + loaders.add(loader); + if (!recursive) + break; + loader = loader.getParent(); + } + + List<File> roots = new ArrayList(); + + // parent first + for (int i = loaders.size() - 1; i >= 0; i--) { + ClassLoader l = loaders.get(i); + if (l instanceof URLClassLoader) { + for (URL url : ((URLClassLoader) l).getURLs()) { // tricky: space is "%20" in URL - File f = new File(urls[i].getFile().replace("%20", " ")); + File f = new File(url.getFile().replace("%20", " ")); // some generated run script could contain empty path, i.e., foo::bar // try detect and filter them out @@ -126,8 +139,7 @@ public class ClasspathScanner { roots.add(f); } } - loader = loader.getParent(); - } while (loader != null && recursive); + } return (File[]) roots.toArray(new File[roots.size()]); }