docs: public boolean compileFromSchemaAndClasses(
              final List<File> schemaPaths,
              final List<File> classesJarPaths,
              final File catalogOutputPath)
      {
          if (schemaPaths != null && !schemaPaths.stream().allMatch(File::exists)) {
              compilerLog.error("Cannot compile nonexistent or missing schema.");
              return false;
          }
  
          List<VoltCompilerReader> ddlReaderList;
          try {
              if (schemaPaths == null || schemaPaths.isEmpty()) {
                  ddlReaderList = new ArrayList<>(1);
                  ddlReaderList.add(new VoltCompilerStringReader(AUTOGEN_DDL_FILE_NAME, m_emptyDDLComment));
              } else {
                  ddlReaderList = DDLPathsToReaderList(
                          schemaPaths.stream().map(File::getAbsolutePath).toArray(String[]::new));
              }
          }
          catch (VoltCompilerException e) {
              compilerLog.error("Unable to open schema file \"" + schemaPaths + "\"", e);
              return false;
          }
  
          InMemoryJarfile inMemoryUserJar = new InMemoryJarfile();
          ClassLoader originalClassLoader = m_classLoader;
          try {
              m_classLoader = inMemoryUserJar.getLoader();
              if (classesJarPaths != null) {
                  // Make user's classes available to the compiler and add all VoltDB artifacts to theirs (overwriting any existing VoltDB artifacts).
                  // This keeps all their resources because stored procedures may depend on them.
                  for (File classesJarPath: classesJarPaths) {
                      if (classesJarPath.exists()) {
                          InMemoryJarfile jarFile = new InMemoryJarfile(classesJarPath);
                          inMemoryUserJar.putAll(jarFile);
                      }
                  }
              }
              if (compileInternal(null, null, ddlReaderList, inMemoryUserJar) == null) {
                  return false;
              }
          } catch (IOException e) {
              compilerLog.error("Could not load classes from user supplied jar file", e);
              return false;
          } finally {
              m_classLoader = originalClassLoader;
          }
  
          try {
              inMemoryUserJar.writeToFile(catalogOutputPath).run();
              return true;
          }
          catch (final Exception e) {
              e.printStackTrace();
              addErr("Error writing catalog jar to disk: " + e.getMessage());
              return false;
          }
      }