code: protected synchronized ClassLoader getClassLoader()
      {
          if (defaultClassLoader == null)
          {
              final ClassLoader parentClassLoader = Thread.currentThread().getContextClassLoader();
              final List<URL> dirUrls = new ArrayList<>();
  
              for (String scriptPathEntry : DEFAULT_SCRIPT_PATH)
              {
                  final File scriptDir = new File(scriptPathEntry);
                  if (! scriptDir.isDirectory())
                  {
                      continue;
                  }
  
                  try
                  {
                      dirUrls.add(scriptDir.toURI().toURL());
                  }
                  catch (MalformedURLException e)
                  {
                      // should not happen
                  }
              }
  
              if (dirUrls.isEmpty())
              {
                  return parentClassLoader;
              }
  
              defaultClassLoader = new URLClassLoader(dirUrls.toArray(new URL[dirUrls.size()]), parentClassLoader);
          }
  
          return defaultClassLoader;
      }
docs: Returns the ClassLoader to use for loading AgiScript classes and load
  other resources like the mapping properties file.<p>
  By default this method returns a class loader that searches for classes in the
  "agi" subdirectory (if it exists) and uses the context class loader of the
  current thread as the parent class loader.<p>
  You can override this method if you prefer using a different class loader.
  
  @return the ClassLoader to use for loading AgiScript classes and load
  other resources like the mapping properties file.
  @since 1.0.0