焦点热门:使用 JCommander 解析命令行参数

2023-06-21 19:56:16 来源:程序员客栈

运行测试:

jcommander 参数验证

在上面的例子中, 假设 clone 命令传入的参数必须是一个 URL,那么我们就要进行参数验证,jcommander 也提供了特有的参数验证方式。

1. 编写参数验证类,需要实现 IParameterValidator接口。

package com.wdbyte.jcommander.v3;import java.net.MalformedURLException;import java.net.URL;import com.beust.jcommander.IParameterValidator;import com.beust.jcommander.ParameterException;/** * @author https://www.wdbyte.com */public class UrlParameterValidator implements IParameterValidator {    @Override    public void validate(String key, String value) throws ParameterException {        try {            new URL(value);        } catch (MalformedURLException e) {            throw new ParameterException("参数 " + key + " 的值必须是 URL 格式");        }    }}

2. clone参数指定验证类。

@Parameter(names = {"clone"},    description = "克隆远程仓库数据",    validateWith = UrlParameterValidator.class,    order = 3,    arity = 1)private String cloneUrl;

运行测试:

$ java -jar git-app.jar clone https://www.wdbyte.com/test.gitclone https://www.wdbyte.com/test.git$ java -jar git-app.jar clone test.gitException in thread "main" com.beust.jcommander.ParameterException: 参数 clone 的值必须是 URL 格式    at com.wdbyte.jcommander.v3.UrlParameterValidator.validate(UrlParameterValidator.java:19)    at com.beust.jcommander.ParameterDescription.validateParameter(ParameterDescription.java:377)    at com.beust.jcommander.ParameterDescription.validateParameter(ParameterDescription.java:344)

jcommander 子命令

在使用 git 时,我们经常会使用下面两个命令。

1. git add file1 file2暂存 file1 文件 file2 文件。

2. git commit -m "注释"提交并添加注释。

什么是子命令

这是一种很常见的操作,git commit除了可以跟 -m子参数外,还可以跟各种参数,通过 git 帮助文档可以看到。

git commit [-a | --interactive | --patch] [-s] [-v] [-u] [--amend]           [--dry-run] [(-c | -C | --fixup | --squash) ]           [-F | -m ] [--reset-author] [--allow-empty]           [--allow-empty-message] [--no-verify] [-e] [--author=]           [--date=] [--cleanup=] [--[no-]status]           [-i | -o] [-S[]] [--] [...]

这种有子参数的情况,我们可以称 commit为 git 的一个子命令,使用 jcommander 如何配置子命令呢?

jcommander 子命令实现

我们新增子命令对应的参数类 GitCommandCommit.java.

package com.wdbyte.jcommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;/** * git commit -m "desc" * @author https://www.wdbyte.com */@Parameters(commandDescription = "提交文件", commandNames = "commit")public class GitCommandCommit {      public static final String COMMAND = "commit";      @Parameter(names = {"-comment", "-m"},        description = "请输入注释",        arity = 1,        required = true)    private String comment;    public String getComment() {        return comment;    }}
关键词:
x 广告
x 广告

Copyright   2015-2022 财务报告网版权所有  备案号: 京ICP备12018864号-19   联系邮箱:29 13 23 6 @qq.com