6 Star 72 Fork 28

JustryDeng / notebook

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
[05]args4j简单使用示例.md 6.07 KB
一键复制 编辑 原始数据 按行查看 历史
邓沙利文 提交于 2022-08-03 17:43 . 优化author

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 <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @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,可看到控制台输出:

    ArgsInfo{arguments=[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)

相关资料

1
https://gitee.com/JustryDeng/notebook.git
git@gitee.com:JustryDeng/notebook.git
JustryDeng
notebook
notebook
master

搜索帮助