code: public static void install(AddOnClassLoader addOnClassLoader, AddOn addOn) {
          installResourceBundle(addOnClassLoader, addOn);
          installAddOnFiles(addOnClassLoader, addOn, true);
          List<Extension> listExts = installAddOnExtensions(addOn);
          installAddOnActiveScanRules(addOn, addOnClassLoader);
          installAddOnPassiveScanRules(addOn, addOnClassLoader);
   
          // postInstall actions
          for (Extension ext : listExts) {
              if (!ext.isEnabled()) {
                  continue;
              }
  
              try {
                  ext.postInstall();
              } catch (Exception e) {
                  logger.error("Post install method failed for add-on " + addOn.getId() + " extension " + ext.getName());
              }
          }
      }
docs: Installs all the (dynamically installable) components ({@code Extension}s, {@code Plugin}s, {@code PassiveScanner}s and
  files) of the given {@code addOn}.
  <p>
  It's also responsible to notify the installed extensions when the installation has finished by calling the method
  {@code Extension#postInstall()}.
  <p>
  The components are installed in the following order:
  <ol>
  <li>{@link java.util.ResourceBundle ResourceBundle};</li>
  <li>Files;</li>
  <li>Extensions;</li>
  <li>Active scanners;</li>
  <li>Passive scanners.</li>
  </ol>
  The files are installed first as they might be required by extensions and scanners.
  
  @param addOnClassLoader the class loader of the given {@code addOn}
  @param addOn the add-on that will be installed
  @see Extension
  @see PassiveScanner
  @see org.parosproxy.paros.core.scanner.Plugin
  @see Extension#postInstall()