public NotebookRepo loadNotebookRepo(String notebookRepoClassName) throws IOException {
    LOGGER.info("Loading NotebookRepo Plugin: {}", notebookRepoClassName);
    if (builtinNotebookRepoClassNames.contains(notebookRepoClassName) ||
            Boolean.parseBoolean(System.getProperty("zeppelin.isTest", "false"))) {
      try {
        return (NotebookRepo) (Class.forName(notebookRepoClassName).newInstance());
      } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
        throw new IOException("Fail to instantiate notebookrepo from classpath directly:"
                + notebookRepoClassName, e);
      }
    }

    String simpleClassName = notebookRepoClassName.substring(notebookRepoClassName.lastIndexOf(".") + 1);
    URLClassLoader pluginClassLoader = getPluginClassLoader(pluginsDir, "NotebookRepo", simpleClassName);
    if (pluginClassLoader == null) {
      return null;
    }
    NotebookRepo notebookRepo = null;
    try {
      notebookRepo = (NotebookRepo) (Class.forName(notebookRepoClassName, true, pluginClassLoader)).newInstance();
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
      throw new IOException("Fail to instantiate notebookrepo " + notebookRepoClassName +
              " from plugin classpath:" + pluginsDir, e);
    }

    return notebookRepo;
  }
@Test
  void testLoadGitNotebookRepo() throws IOException {
    NotebookRepo notebookRepo = new PluginManager(ZeppelinConfiguration.load())
            .loadNotebookRepo("org.apache.zeppelin.notebook.repo.GitNotebookRepo");
    assertTrue(notebookRepo instanceof GitNotebookRepo);
  }