java命令行解析库_Java命令行解析类库技术选型分析

虽然在Java领域中web程序应用广泛,但是基于Java开发命令行的工具也是非常使用的,本文将介绍一下在过去几天针对命令行工具Java类库的调研结果。

JCommander

使用示例:

public class JCommanderTest {

@Parameter

public List parameters = Lists.newArrayList();

@Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")

public Integer verbose = 1;

@Parameter(names = "-groups", description = "Comma-separated list of group names to be run")

public String groups;

@Parameter(names = "-debug", description = "Debug mode")

public boolean debug = false;

@DynamicParameter(names = "-D", description = "Dynamic parameters go here")

public Map dynamicParams = new HashMap();

}

评价: 文档齐备,非常完整和细致,基于注解来进行命令的设置,简单易用,基本满足了命令行工具的全部需求。

picocli

import picocli.CommandLine;

import picocli.CommandLine.Option;

import picocli.CommandLine.Parameters;

import java.io.File;

public class Example implements Runnable {

@Option(names = { "-v", "--verbose" }, description = "Verbose mode. Helpful for troubleshooting. " +

"Multiple -v options increase the verbosity.")

private boolean[] verbose = new boolean[0];

@Option(names = { "-h", "--help" }, usageHelp = true,

description = "Displays this help message and quits.")

private boolean helpRequested = false;

@Parameters(arity = "1..*", paramLabel = "FILE", description = "File(s) to process.")

private File[] inputFiles;

public void run() {

if (verbose.length > 0) {

System.out.println(inputFiles.length + " files to process...");

}

if (verbose.length > 1) {

for (File f : inputFiles) {

System.out.println(f.getAbsolutePath());

}

}

}

public static void main(String[] args) {

CommandLine.run(new Example(), System.out, args);

}

}

这里内部支持Command的概念,支持subCommand的概念,

@Component

@Command(name = "greeting")

class GreetingCommand implements Runnable {

@Parameters(paramLabel = "NAME", description = "name", arity = "0..1")

String name;

@Override

public void run() {

if (StringUtils.hasText(name)) {

System.out.println("Hello " + name + "!");

} else {

System.out.println("Hello world!");

}

}

}

总结分析: 更新比较活跃,封装了很多的概念,比如Command,方便基于命令来调用不同的逻辑处理,基于注解来设置各类arg Option,满足日常的使用和操作。

Args4j

...

import org.kohsuke.args4j.Option;

...

@Option(name="-name",usage="Sets a name")

public String name;

...

@Option(name="-file",usage="Sets a file if that is present")

public void setFile(File f) {

...

支持注解来设置命令行参数,也支持基于在代码中设置参数,简单易用,但是从目前来看,更新已经停止了。

Commons CLI

地址: https://commons.apache.org/proper/commons-cli/

地址: 来自apache common的开源项目

更新: 最后一次更新是1.5-SNAPSHOT,是在2017年6月8日

总结分析: 更新迟缓,基于代码来配置和设置参数,目前最新版本是1.5,2.0在开发过程中,但是从未完成过。

总结

JCommander首选,文档和使用皆非常出色。 Picocli也是非常出色的,提供了丰富的功能,且支持Command的命令定义以及subcommand的方式,比较适合命令行的工具开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值