背景介绍
项目中使用了Args4J来管理命令行参数.所以我来学习一下,做个Demo,了解其基本使用方式.
项目简介
简介
args4j is a small Java class library that makes it easy to parse command line options/arguments in your CUI application.
github仓库
https://github.com/kohsuke/args4j
官网
http://args4j.kohsuke.org/
主要特点
option的几个field
- *name指定该参数的名称
- aliases指定该参数的别名,
- usage解释该参数的作用
- metaVar解释该参数的类型
- required指定该参数是否为必须给定的
Demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| 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;
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
方法即可,还可以添加钩子方法来控制要不要加载参数.
一个使用的Demo
最近我有在写一个lucene的demo玩,本地和服务器上读取文件的目录不同,索引写入的目录也不同.出现过两次本地测试完毕之后打成jar包丢到服务器上因为目录不存在(或者不正确)二重新打jar的情况.
这时候可以使用args4j.每次启动的时候指定两个路径即可.避免了程序对路径的强依赖而出现上面那种尴尬的情况.
ChangeLog
2019-04-01 完成
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客——>呼延十