code: public static Argument parse(final String arg) {
          if (arg.startsWith("-D")) {
              final String key;
              final String value;
              // Check for an =
              final int index = arg.indexOf('=');
              if (index == -1) {
                  key = arg.substring(2);
                  value = null;
              } else {
                  key = arg.substring(2, index);
                  if (arg.length() < (index + 1)) {
                      value = null;
                  } else {
                      value = arg.substring(index + 1);
                  }
              }
              return new SystemPropertyArgument(key, value);
          }
          final String key;
          final String value;
          // Check for an =
          final int index = arg.indexOf('=');
          if (index == -1) {
              key = arg;
              value = null;
          } else {
              key = arg.substring(0, index);
              if (arg.length() < (index + 1)) {
                  value = null;
              } else {
                  value = arg.substring(index + 1);
              }
          }
          return new DefaultArgument(key, value);
      }
docs: Attempts to parse the argument into a key value pair. The separator is assumed to be {@code =}. If the value
  starts with a {@code -D} it's assumed to be a system property.
  <p/>
  If the argument is not a traditional key/value pair separated by an {@code =} the arguments key will be the full
  argument passed in and the arguments value will be {@code null}.
  
  @param arg the argument to parse
  
  @return the parsed argument