public synchronized void registerFunctionsFromFile(File jarFile)
      throws ClassNotFoundException, IOException {
    logger.debug("Registering functions for: {}", jarFile.getName());

    List<Function<?>> registeredFunctions = new LinkedList<>();
    try {
      Collection<String> functionClasses = findFunctionsInThisJar(jarFile);
      String filePath = jarFile.getAbsolutePath();
      Collection<Function<?>> functions = new LinkedList<>();
      for (String functionClass : functionClasses) {
        logger.debug("Attempting to load class: {}, from JAR file: {}", functionClass,
            filePath);
        try {
          functions.addAll(loadFunctionFromClassName(functionClass));
        } catch (ClassNotFoundException | NoClassDefFoundError cnfex) {
          logger.error("Unable to load all classes from JAR file: {}",
              filePath, cnfex);
          throw cnfex;
        }
      }
      registeredFunctions.addAll(registerFunction(filePath, functions));
    } catch (IOException ioex) {
      logger.error("Exception when trying to find function classes from Jar", ioex);
      throw ioex;
    }
    String artifactId = JarFileUtils.toArtifactId(jarFile.getName());
    List<Function<?>> previouslyRegisteredFunctions =
        deploymentToFunctionsMap.remove(artifactId);
    if (!registeredFunctions.isEmpty()) {
      deploymentToFunctionsMap.put(artifactId, registeredFunctions);
    }
    unregisterUndeployedFunctions(previouslyRegisteredFunctions, registeredFunctions);
  }
Scan the JAR file and attempt to register any function classes found.

@param jarFile The {@link File} that contains {@link Function} that are to be registered
geode-core/src/main/java/org/apache/geode/cache/internal/execute/FunctionToFileTracker.java