private void unloadComponents(File jarFile, ExtensionURLClassLoader classLoader)
      throws UninstallException {
    try {
      List<ComponentDeclaration> componentDeclarations = getDeclaredComponents(jarFile);

      if (componentDeclarations == null) {
        this.logger.debug("[{}] does not contain any component", jarFile);
        return;
      }

      for (ComponentDeclaration componentDeclaration : componentDeclarations) {
        try {
          for (ComponentDescriptor componentDescriptor :
              this.jarLoader.getComponentsDescriptors(
                  classLoader.loadClass(componentDeclaration.getImplementationClassName()))) {
            this.componentManager.unregisterComponent(
                componentDescriptor.getRole(), componentDescriptor.getRoleHint());
          }
        } catch (ClassNotFoundException e) {
          this.logger.error(
              "Failed to load class [{}]", componentDeclaration.getImplementationClassName(), e);
        }
      }
    } catch (Exception e) {
      throw new UninstallException("Failed to load jar file components", e);
    }
  }