container/src/main/java/com/streamsets/datacollector/stagelibrary/ClassLoaderStageLibraryTask.java
@VisibleForTesting void validateRequiredStageLibraries() {
    // Name of all installed libraries
    Set<String> installedLibraries = stageLibraries.stream()
      .map(StageLibraryDefinition::getName)
      .collect(Collectors.toSet());

    // Required libraries
    Set<String> requiredLibraries = new HashSet<>();
    String config = configuration.get(SdcConfiguration.REQUIRED_STAGELIBS, DEFAULT_REQUIRED_STAGELIBS);
    for(String stageLib : config.split(",")) {
      if(!stageLib.isEmpty()) {
        requiredLibraries.add(stageLib);
      }
    }

    Set<String> missingLibraries = Sets.difference(requiredLibraries, installedLibraries);
    if(!missingLibraries.isEmpty()) {
      throw new RuntimeException(Utils.format(
        "Some required stage libraries are missing: {}",
        StringUtils.join(missingLibraries, ", ")
      ));
    }
  }
@VisibleForTesting void validateRequiredStageLibraries() {
    // Name of all installed libraries
    Set<String> installedLibraries = stageLibraries.stream()
      .map(StageLibraryDefinition::getName)
      .collect(Collectors.toSet());

    // Required libraries
    Set<String> requiredLibraries = new HashSet<>();
    String config = configuration.get(SdcConfiguration.REQUIRED_STAGELIBS, DEFAULT_REQUIRED_STAGELIBS);
    for(String stageLib : config.split(",")) {
      if(!stageLib.isEmpty()) {
        requiredLibraries.add(stageLib);
      }
    }

    Set<String> missingLibraries = Sets.difference(requiredLibraries, installedLibraries);
    if(!missingLibraries.isEmpty()) {
      throw new RuntimeException(Utils.format(
        "Some required stage libraries are missing: {}",
        StringUtils.join(missingLibraries, ", ")
      ));
    }
  }
Validate that all required libraries are available and loaded.