public static int run(String[] argsArray, Consumer<byte[]> out, Consumer<byte[]> err) { Consumer<String> outln = s -> out.accept((s + "\n").getBytes()); final List<String> args = new ArrayList<>(Arrays.asList(argsArray)); if (args.size() < 1) { usage(outln); return EXIT_FAIL; } else if (args.size() == 1 && (args.get(0).equals("--help"))) { usage(outln); return EXIT_SUCCESS; } final Optional<String> command = extractArg(args, COMMAND_PREFIX).map(arg -> arg.substring(COMMAND_PREFIX.length())); final Optional<Integer> port = NativeImageBuildServer.extractPort(args); if (port.isPresent() && command.isPresent()) { ServerCommand serverCommand = ServerCommand.valueOf(command.get()); return sendRequest(serverCommand, String.join(" ", args).getBytes(), port.get(), out, err); } else { usage(outln); return EXIT_FAIL; } }