首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Args4j的使用

Args4j的使用

作者头像
呼延十
发布2019-06-26 16:51:32
2.1K0
发布2019-06-26 16:51:32
举报
文章被收录于专栏:呼延呼延

背景介绍

项目中使用了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/

主要特点
  • 通过注解使得命令行解析更加容易。
  • 生成使用介绍更容易。
  • 生成的HTML、XML文档包含了所有选项说明。
  • 完全本地化支持。
  • 选项风格类似javac而不是GNU风格(-lR 表示包含两个选项 l 和 R)。
  • 基于MIT协议发布。
option的几个field
  • *name指定该参数的名称
  • aliases指定该参数的别名,
  • usage解释该参数的作用
  • metaVar解释该参数的类型
  • required指定该参数是否为必须给定的

Demo

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方法即可,还可以添加钩子方法来控制要不要加载参数.

一个使用的Demo

最近我有在写一个lucene的demo玩,本地和服务器上读取文件的目录不同,索引写入的目录也不同.出现过两次本地测试完毕之后打成jar包丢到服务器上因为目录不存在(或者不正确)二重新打jar的情况.

这时候可以使用args4j.每次启动的时候指定两个路径即可.避免了程序对路径的强依赖而出现上面那种尴尬的情况.

ChangeLog

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')



本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 项目简介
    • 简介
      • github仓库
        • 官网
          • 主要特点
            • option的几个field
            • Demo
            • 扩展
            • 一个使用的Demo
              • ChangeLog
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档