private static EnvMode inferMode() { if (Msc.isInsideTest()) { return EnvMode.TEST; } else { return ClasspathUtil.getClasspathFolders().isEmpty() ? EnvMode.PRODUCTION : EnvMode.DEV; } }
public static synchronized List<File> files(String packageName, Predicate<File> filter) { ArrayList<File> files = new ArrayList<>(); files(packageName, files, filter); return files; }
public static synchronized void files(String packageName, Collection<File> files, Predicate<File> filter) { Enumeration<URL> urls = getResources(packageName); while (urls.hasMoreElements()) { URL url = urls.nextElement(); File file = new File(url.getFile()); getFiles(files, file, filter); } }
@Override public Object call() { List<Object> info = U.list(); if (!Msc.isPlatform()) { info.add(h3("Application JAR:")); if (ClasspathUtil.hasAppJar()) { info.add(h4(ClasspathUtil.appJar())); } else { info.add(h4(WARN, " No ", b("app.jar"), " file was configured on the classpath!")); } } info.add(h3("Classpath folders:")); info.add(grid(ClasspathUtil.getClasspathFolders()).columns("trim").headers("Classpath entries (folders)").pageSize(0)); info.add(h3("Classpath JARs:")); info.add(grid(ClasspathUtil.getClasspathJars()).columns("trim").headers("Classpath entries (JARs)").pageSize(0)); return multi(info); }
String pkgPath = pkgName.replace('.', File.separatorChar); Set<String> classpath = getClasspath(); if (shouldScanDir(cpEntry.getAbsolutePath())) { Log.debug("Scanning directory", "root", cpEntry.getAbsolutePath()); getClassesFromDir(classes, cpEntry, startingDir, pkgName, regex, filter, annotated, classLoader); if (shouldScanJAR(jarName)) { Log.debug("Scanning JAR", "name", jarName); getClassesFromJAR(jarName, classes, packageName, regex, filter, annotated, classLoader); } else { Log.debug("Skipping JAR", "name", jarName);
@Override public Object call() { List<Object> info = U.list(); info.add(h3(center("Basic overview:"))); Map<String, Object> appInfo = U.map(); if (!Msc.isPlatform()) { appInfo.put("Application JAR", ClasspathUtil.appJar()); appInfo.put("Application path (root packages)", App.path()); } appInfo.put("Active profiles", Env.profiles()); appInfo.put("Command line arguments", Env.args()); info.add(grid(appInfo)); info.add(h3(center("System metrics:"))); info.add(GraphsHandler.graphs(3)); return multi(info); }
public static synchronized List<File> dir(String dir, Predicate<File> filter) { ArrayList<File> files = new ArrayList<>(); getFiles(files, new File(dir), filter); return files; }
public List<String> getAll() { return ClasspathUtil.getClasses(this); }
public static boolean hasAppJar() { getClasspath(); // init return appJar != null; }
private static List<String> scanClasses(ScanParams params) { String[] pkgs = params.in(); String rootPackage = ClasspathUtil.getRootPackage(); if (U.isEmpty(pkgs)) { pkgs = rootPackage != null ? new String[]{rootPackage} : new String[]{""}; } long startingAt = U.time(); String regex = params.matching(); Pattern pattern = U.notEmpty(regex) ? Pattern.compile(regex) : null; if (regex != null) { Log.info("Scanning classpath", "!annotated", Msc.annotations(params.annotated()), "!packages", Arrays.toString(pkgs), "!matching", regex); } else { Log.info("Scanning classpath", "!annotated", Msc.annotations(params.annotated()), "!packages", Arrays.toString(pkgs)); } Set<String> classpath = U.notEmpty(params.classpath()) ? U.set(params.classpath()) : ClasspathUtil.getClasspath(); AtomicInteger searched = new AtomicInteger(); Set<String> classes = U.set(); for (String pkg : pkgs) { classes.addAll(retrieveClasses(classpath, pkg, params.annotated(), params.bytecodeFilter(), pattern, params.classLoader(), searched)); } List<String> classList = U.list(classes); long timeMs = U.time() - startingAt; Log.info("Finished classpath scan", "time", Msc.maybeMasked(timeMs) + "ms", "searched", searched.get(), "!found", Msc.classNames(classList)); return classList; }
public static String[] staticFilesPath() { List<String> path = U.list(staticFilesPath); if (Env.isInitialized() && Env.dev()) { path.addAll(0, ClasspathUtil.getClasspathStaticFolders()); } return U.arrayOf(path); }
private static synchronized void restartApp() { if (!MscOpts.hasRapidoidWatch()) { Log.warn("Cannot reload/restart the application, module rapidoid-watch is missing!"); } if (mainClassName == null) { Log.warn("Cannot reload/restart the application, the main app class couldn't be detected!"); } Msc.logSection("!Restarting the web application..."); restarted = true; notifyListenersBeforeRestart(); resetAppStateBeforeRestart(); if (MscOpts.hasRapidoidJPA()) { loader = ReloadUtil.reloader(); ClasspathUtil.setDefaultClassLoader(loader); } reloadAndRunMainClass(); restarted = true; notifyListenersAfterRestart(); Log.info("!Successfully restarted the application!"); }
private static List<Class<?>> filterClasses(Classes appClasses, String packageName, Pattern regex, Predicate<Class<?>> filter, Class<? extends Annotation> annotated) { List<Class<?>> matching = U.list(); for (Entry<String, Class<?>> e : appClasses.entrySet()) { Class<?> cls = e.getValue(); String pkg = cls.getPackage() != null ? cls.getPackage().getName() : ""; if (U.isEmpty(packageName) || pkg.startsWith(packageName + ".") || pkg.equals(packageName)) { if (ClasspathUtil.classMatches(cls, filter, annotated, regex)) { matching.add(cls); } } } return matching; }
@Override public Object call() throws Exception { List<Object> info = U.list(); if (!Msc.isPlatform()) { info.add(h3("Application JAR:")); if (ClasspathUtil.hasAppJar()) { info.add(h4(ClasspathUtil.appJar())); } else { info.add(h4(WARN, " No ", b("app.jar"), " file was configured on the classpath!")); } } info.add(h3("Classpath folders:")); info.add(grid(ClasspathUtil.getClasspathFolders()).columns("trim").headers("Classpath entries (folders)").pageSize(0)); info.add(h3("Classpath JARs:")); info.add(grid(ClasspathUtil.getClasspathJars()).columns("trim").headers("Classpath entries (JARs)").pageSize(0)); return multi(info); }
if (!cpe.contains("*") && !cpe.contains("?") && U.neq(cpe, ClasspathUtil.appJar())) { Log.warn("Classpath entry doesn't exist: " + cpe);
private static void getFiles(Collection<File> files, File file, Predicate<File> filter) { if (file.isDirectory()) { Log.trace("scanning directory", "dir", file); for (File f : file.listFiles()) { if (f.isDirectory()) { getFiles(files, f, filter); } else { Log.trace("scanned file", "file", f); try { if (filter == null || filter.eval(f)) { files.add(f); } } catch (Exception e) { throw U.rte(e); } } } } }
public static List<String> getAll() { return ClasspathUtil.getClasses(new ScanParams()); }
public static synchronized Set<String> getClasspathFolders() { Set<String> folders = U.set(); Set<String> cps = ClasspathUtil.getClasspath(); for (String cp : cps) { if (new File(cp).isDirectory()) { folders.add(cp); } } return folders; }