args4j简单使用示例

Posted justry_deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了args4j简单使用示例相关的知识,希望对你有一定的参考价值。

args4j简单使用示例


第一步:引入依赖

<dependency>
    <groupId>args4j</groupId>
    <artifactId>args4j</artifactId>
    <version>2.33</version>
</dependency>

第二步:封装参数对象

import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import org.kohsuke.args4j.spi.BooleanOptionHandler;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * (non-javadoc)
 *
 * @author JustryDeng
 * @since 2021/10/14 0:41:06
 */
@SuppressWarnings("all")
public class ArgsInfo 
    
    /**
     * 此字段主要用于容纳可能被多解析出来的无效的指令
     */
    @Argument
    private List<String> arguments = new ArrayList<>();
    
    /** *************************** 通过@link Option注解,将启动指令中的参数与此模型的字段关联起来 *************************** */
    
    @Option(name = "-name", required = true, usage = "我是-name的说明")
    private String name;
    
    @Option(name = "-age", usage = "我是-age的说明")
    private int age = -1;
    
    @Option(name = "-student", usage = "我是-student的说明", handler = BooleanOptionHandler.class)
    private boolean student = false;
    
    @Option(name = "-hobby", aliases = "-love", "-like", usage = "我是-hobby的说明")
    private String hobby = "defaultHobby";
    
    @Option(name = "-gender", usage = "我是-gender的说明")
    private GenderEnum gender = GenderEnum.WOMAN;
    
    @Option(name = "-avatar", usage = "我是-avatar的说明")
    private File avatar = new File("D:/defaultDir/");
    
    public enum GenderEnum 
        MAN, WOMAN
    
    
    @Override
    public String toString() 
        return "ArgsInfo" +
                "arguments=" + arguments +
                ", name='" + name + '\\'' +
                ", age=" + age +
                ", student=" + student +
                ", hobby='" + hobby + '\\'' +
                ", gender=" + gender +
                ", avatar=" + avatar +
                '';
    

第三步:在main方法中进行解析

import com.example.args4jdemo.model.ArgsInfo;
import com.ideaaedi.commonds.exception.ExceptionUtil;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SuppressWarnings("all")
@SpringBootApplication
public class Args4jDemoApplication 
    
    public static void main(String[] args) 
        // 创建一个对象,这个对象中被@Option注解标注了的字段即为想要解析到的字段
        ArgsInfo argsInfo = new ArgsInfo();
        // 创建解析器
        CmdLineParser cmdLineParser = new CmdLineParser(argsInfo);
        try 
            // 进行解析
            cmdLineParser.parseArgument(args);
            // 打印解析结果
            System.out.println(argsInfo);
         catch (CmdLineException e) 
            ///e.printStackTrace();
            System.out.println(ExceptionUtil.getStackTraceMessage(e));
            // 打印使用说明
            new CmdLineParser(new ArgsInfo()).printUsage(System.out);
        
    

测试验证

  • 正常测试

    执行java -jar args4j-demo-0.0.1-SNAPSHOT.jar -name 邓沙利文 -age 18 -love eating -student false -gender MAN -avatar D:/avatar.jpg,可看到控制台输出:

    ArgsInfoarguments=[false], name='邓沙利文', age=18, student=true, hobby='eating', gender=MAN, avatar=D:\\avatar.jpg
    
  • 异常测试

    执行java -jar args4j-demo-0.0.1-SNAPSHOT.jar,可看到控制台输出:

    org.kohsuke.args4j.CmdLineException: Option "-name" is required
    	at org.kohsuke.args4j.CmdLineParser.checkRequiredOptionsAndArguments(CmdLineParser.java:588)
    	at org.kohsuke.args4j.CmdLineParser.parseArgument(CmdLineParser.java:534)
    	at com.example.args4jdemo.Args4jDemoApplication.main(Args4jDemoApplication.java:20)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
    
     -age N                    : 我是-age的说明 (default: -1)
     -avatar FILE              : 我是-avatar的说明 (default: D:\\defaultDir)
     -gender [MAN | WOMAN]     : 我是-gender的说明 (default: WOMAN)
     -hobby (-love, -like) VAL : 我是-hobby的说明 (default: defaultHobby)
     -name VAL                 : 我是-name的说明
     -student                  : 我是-student的说明 (default: false)
    

相关资料

以上是关于args4j简单使用示例的主要内容,如果未能解决你的问题,请参考以下文章

Java Main参数解析(Args4j)

面向协议编程与 Cocoa 的邂逅(下)

ES的QueryFilterMetricBucketing使用详解

ES的QueryFiltermetricbucketing使用详解

SpringBoot集成gRPC微服务工程搭建实践

文本挖掘从小白到精通---语料向量空间和模型的概念