private static Options options() {
    return new Options()
      .addOption(Option.builder("h")
        .longOpt("help")
        .desc("print help")
        .build())
      .addOption(Option.builder("c")
        .longOpt("connection-string")
        .desc("zookeeper connection string")
        .hasArg()
        .argName("connection-string")
        .build())
      .addOption(Option.builder("a")
        .longOpt("acl")
        .desc("ACL of a znode in the following format <scheme:id:permission>")
        .hasArg()
        .argName("acl")
        .build())
      .addOption(Option.builder("z")
        .longOpt("znode")
        .desc("znode path")
        .hasArg()
        .argName("znode")
        .build())
      .addOption(Option.builder("d")
        .longOpt("delete")
        .desc("delete specified znode and all it's children recursively")
        .argName("delete")
        .build());
  }
I'm a command line utility that provides functionality that the official zookeeper-client does not support.
E.g. I can set ACLs recursively on a znode.
Also I can remove znode recursively.
ambari-agent/src/main/java/org/apache/ambari/tools/zk/ZkMigrator.java