code: public static void main(String[] args) throws Exception {
          val b = BookKeeperServiceRunner.builder();
          b.startZk(false);
          try {
              int bkBasePort = Integer.parseInt(System.getProperty(PROPERTY_BASE_PORT));
              int bkCount = Integer.parseInt(System.getProperty(PROPERTY_BOOKIE_COUNT));
              val bkPorts = new ArrayList<Integer>();
              for (int i = 0; i < bkCount; i++) {
                  bkPorts.add(bkBasePort + i);
              }
  
              b.bookiePorts(bkPorts);
              b.zkPort(Integer.parseInt(System.getProperty(PROPERTY_ZK_PORT)));
              b.ledgersPath(System.getProperty(PROPERTY_LEDGERS_PATH));
              b.startZk(Boolean.parseBoolean(System.getProperty(PROPERTY_START_ZK, "false")));
              b.tLSKeyStore(System.getProperty(TLS_KEY_STORE, "../../../config/bookie.keystore.jks"));
              b.tLSKeyStorePasswordPath(System.getProperty(TLS_KEY_STORE_PASSWD, "../../../config/bookie.keystore.jks.passwd"));
              b.secureBK(Boolean.parseBoolean(System.getProperty(PROPERTY_SECURE_BK, "false")));
  
          } catch (Exception ex) {
              System.out.println(String.format("Invalid or missing arguments (via system properties). Expected: %s(int), " +
                              "%s(int), %s(int), %s(String). (%s).", PROPERTY_BASE_PORT, PROPERTY_BOOKIE_COUNT, PROPERTY_ZK_PORT,
                      PROPERTY_LEDGERS_PATH, ex.getMessage()));
              System.exit(-1);
              return;
          }
  
          BookKeeperServiceRunner runner = b.build();
          runner.startAll();
          Thread.sleep(Long.MAX_VALUE);
      }
docs: Main method that can be used to start BookKeeper out-of-process using BookKeeperServiceRunner.
  This is used when invoking this class via ProcessStarter.
  
  @param args Args.
  @throws Exception If an error occurred.