项目中使用了Args4J来管理命令行参数.所以我来学习一下,做个Demo,了解其基本使用方式.
args4j is a small Java class library that makes it easy to parse command line options/arguments in your CUI application.
https://github.com/kohsuke/args4j
http://args4j.kohsuke.org/
package daily;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import java.util.ArrayList;
import java.util.List;
import static org.kohsuke.args4j.OptionHandlerFilter.ALL;
/**
* Created by pfliu on 2019/04/01.
*/
public class Args4JTest {
@Option(name = "-bool", usage = "test a bool")
private boolean testBool;
@Option(name = "-string", usage = "test a string")
private String testString;
@Argument
private List<String> arguments = new ArrayList<String>();
public static void main(String[] args) {
new Args4JTest().doMain(args);
}
private void doMain(String[] args) {
CmdLineParser parser = new CmdLineParser(this);
parser.setUsageWidth(80);
try {
parser.parseArgument(args);
if (arguments.isEmpty())
throw new CmdLineException(parser, "No argument is given");
} catch (CmdLineException e) {
System.err.println(e.getMessage());
System.err.println("java SampleMain [options...] arguments...");
parser.printUsage(System.err);
System.err.println();
System.err.println(" Example: java SampleMain" + parser.printExample(ALL));
return;
}
System.out.println(testBool);
System.out.println(testString);
}
}
通过命令行启动该类,带上参数-bool=true -string=haha
,可以看到预期之中的输出.
在使用spring的情况下这个其实是没有太多使用场景的,但是编程不止是spring.会有一些项目是手动管理的,或者日常我们写Demo的时候,希望动态的指定一些参数,可以使用这个jar包.算得上轻巧好用的小工具.
如果日常编写大量的Main类,其经常使用此功能,可以参考模板方法模式,实现一个AbstractMain
类,在这个类中进行参数的加载(毕竟对类有侵入,parser.parseArgument(args);
这一句是重点).然后其他类继承自父类且实现真正的main
方法即可,还可以添加钩子方法来控制要不要加载参数.
最近我有在写一个lucene的demo玩,本地和服务器上读取文件的目录不同,索引写入的目录也不同.出现过两次本地测试完毕之后打成jar包丢到服务器上因为目录不存在(或者不正确)二重新打jar的情况.
这时候可以使用args4j.每次启动的时候指定两个路径即可.避免了程序对路径的强依赖而出现上面那种尴尬的情况.
2019-04-01 完成
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客——>呼延十
var gitment = new Gitment({ id: 'Args4j的使用', // 可选。默认为 location.href owner: 'hublanker', repo: 'blog', oauth: { client_id: '2297651c181f632a31db', client_secret: 'a62f60d8da404586acc965a2ba6a6da9f053703b', }, }) gitment.render('container')