code: int run(String... args) {
          if (log == null) {
              log = new PrintWriter(System.out);
          }
          try {
              handleOptions(args);
              if (options.help) {
                  showHelp();
              }
              if (options.version || options.fullVersion) {
                  showVersion(options.fullVersion);
              }
              if (options.help || options.version || options.fullVersion) {
                  return EXIT_OK;
              }
              if (options.numFilters() > 1) {
                  reportError("err.invalid.filters");
                  return EXIT_CMDERR;
              }
  
              // default command to analyze dependences
              if (command == null) {
                  command = analyzeDeps();
              }
              if (!command.checkOptions()) {
                  return EXIT_CMDERR;
              }
  
              boolean ok = run();
              return ok ? EXIT_OK : EXIT_ERROR;
  
          } catch (BadArgs|UncheckedBadArgs e) {
              reportError(e.getKey(), e.getArgs());
              if (e.showUsage()) {
                  log.println(getMessage("main.usage.summary", PROGNAME));
              }
              return EXIT_CMDERR;
          } catch (ResolutionException e) {
              reportError("err.exception.message", e.getMessage());
              return EXIT_CMDERR;
          } catch (IOException e) {
              e.printStackTrace();
              return EXIT_CMDERR;
          } catch (MultiReleaseException e) {
              reportError(e.getKey(), e.getParams());
              return EXIT_CMDERR;  // could be EXIT_ABNORMAL sometimes
          } finally {
              log.flush();
          }
      }
docs: terminated abnormally