Java命令行参数

目录

一、引入依赖

二、方法实战

三、方法讲解


本文我们介绍一个命令行工具,Apache Commons CLI。

在我们执行java的jar包时,常用的命令是

java -jar hellowork.jar
# 或者
nohup java -jar hellowork.jar >>/data/log.txt2>&1 &

我们还可以在执行该命令时添加执行参数,不管是在dos还是Linux上执行该命令,抑或是在IDE工具中配置,都是一样的。 

 Java的命令行参数有很多,本文不做介绍,感兴趣的小伙伴可以自行百度:Java命令行参数。

一、引入依赖

本文的重点在于介绍,自定义Java命令行参数以及如何使用。

首先引入依赖:

    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <version>1.5.0</version>
    </dependency>

目前最新版是1.5.0,至于其他版本可以在maven仓库检索:

https://mvnrepository.com/artifact/commons-cli/commons-cli

引入依赖下载好之后便可以操作了。

二、方法实战

但是在操作之前,我们需要介绍一下这个 commons-cli。

commons-cli其实就是Apache Commons CLI,是Apache下的解析命令行的工具包。具体的可以自行百度。

有4个重载方法,我们使用第二个和第三个,也就是有2个参数和3个参数的方法。

 最终的代码如下:

package com.dake.main;

import org.apache.commons.cli.*;

public class CommandLineMain {

    public static void main(String[] args) throws ParseException {

        Options options = new Options();
        options.addOption("v", true, "version");
        options.addOption("e", true, "env");
        options.addOption("h", "help");

        CommandLineParser commandLineParser = new DefaultParser();
        CommandLine commandLine = commandLineParser.parse(options, args);

        if (commandLine.hasOption("h")) {
            System.out.println("这是帮助参数");
        } else if (commandLine.hasOption("v")) {
            String version = commandLine.getOptionValue("v");
            System.out.println("版本号为" + version);
        } else if (commandLine.hasOption("e")) {
            String env = commandLine.getOptionValue("e");
            System.out.println("环境为" + env);
        }
    }
}

我们使用idea自带的工具进行测试。

 我们在启动的命令行CLI中添加-h参数。

保存并运行main方法。

 

修改h参数改为-e参数。

 

-v参数我们就不进行演示了。

三、方法讲解

下面我们看看这个addOption方法。

首先看最长的参数的方法,因为其他方法都是基于这个方法的。

    /**
     * Add an option that contains a short-name and a long-name.
     *
     * <p>
     * It may be specified as requiring an argument.
     * </p>
     *
     * @param opt Short single-character name of the option.
     * @param longOpt Long multi-character name of the option.
     * @param hasArg flag signalling if an argument is required after this option
     * @param description Self-documenting description
     * @return the resulting Options instance
     */
    public Options addOption(final String opt, final String longOpt, final boolean hasArg, final String description) {
        addOption(new Option(opt, longOpt, hasArg, description));
        return this;
    }

首先我们看注释,翻译过来就是:

添加一个包含短名称和长名称的选项。它可以被指定为需要一个参数。

形参:

opt–选项的短单字符名称。

longOpt–选项的长多字符名称。

hasArg–如果标志位true,则需要有参数,否则没有。

description-描述信息。

返回值:

生成的Options实例

简单来说,这4个参数都是命令的一些信息,分别是:

  1. 单字符描述,比如e/v等。
  2. 长命令,比如version、env等。
  3. 是否具有参数,也就是说该命令是否有取值,比如我们上面演示的-h后面没有跟参数,而-e命令后面则跟了参数取值为env。
  4. 描述信息,也就是该命令的具体含义。

一些文章中将第三个参数hasArg说成该命令否必须的取值,这是不对的。如果是这个意思,那么我们只需要把该参数设置成true,但是我们不输入-v或者-e,然后代码会报错才对。但是我们刚才的代码,不管是e还是v的第三个参数都是true,但是我们测试h和e的时候代码并没有报错。

实际上第三个参数的意思是说,该命令(指的是-e或-v)的参数取值,也就是它们后面是否跟的有参数取值,如果是true,但是我们不跟参数就会报错。

此时-v后面什么都没有,我们保存并运行代码。

 报错了,意思是:

缺少选项v的参数

 如果我们把true改成false再运行。

但是我们在获取该命令的取值时为null。

这也验证了我们所说的意思。

总结:

hasArg是一个用来校验命令后是否有参数取值的布尔值,true代表必须跟取值,false代表非必须。

上面我们使用了三个参数的方法,其实这是把长命令置为了null而已。

而2个参数的方法是把长命令置为了null,并且是否具有参数置为了false。

 1个参数的方法传入的是一个Option,可以自己创建这个Option,然后传递给这个方法。

当然,这个命令行工具还有其他方法,这里就不具体讲述了,感兴趣的小伙伴可以自行参详。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北冥牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值