code: public void importModulesFromSetupBean() throws Exception {
  
          // read here how the list of modules to be installed is passed from the setup bean to the
          // setup thread, and finally to the shell process that executes the setup script:
          // 1) the list with the package names of the modules to be installed is saved by setInstallModules
          // 2) the setup thread gets initialized in a JSP of the setup wizard
          // 3) the instance of the setup bean is passed to the setup thread by setAdditionalShellCommand
          // 4) the setup bean is passed to the shell by startSetup
          // 5) because the setup bean implements I_CmsShellCommands, the shell constructor can pass the shell's CmsObject back to the setup bean
          // 6) thus, the setup bean can do things with the Cms
  
          if ((m_cms != null) && (m_installModules != null)) {
              for (int i = 0; i < m_installModules.size(); i++) {
                  String filename = m_moduleFilenames.get(m_installModules.get(i));
                  try {
                      importModuleFromDefault(filename);
                  } catch (Exception e) {
                      // log a exception during module import, but make sure the next module is still imported
                      e.printStackTrace(System.err);
                  }
              }
              m_hasIndexHtml = false;
              try {
                  m_cms.readResource("/index.html");
                  m_hasIndexHtml = true;
              } catch (Exception e) {
  
              }
  
          }
  
      }
docs: Installed all modules that have been set using {@link #setInstallModules(String)}.<p>
  
  This method is invoked as a shell command.<p>
  
  @throws Exception if something goes wrong