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,然后传递给这个方法。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/9784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这6个超好用的免费图片素材网站,赶紧收藏~

6个高质量图片素材网站&#xff0c;免费可商用&#xff0c;记得收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 菜鸟图库是我推荐过很多次的一个设计素材网站&#xff0c;除了设计类&#xff0c;还有很多自媒体可以用到的素材&#xff0c;比如高…

如何免费使用ChatGPT 4?

自从ChatGPT发布以来&#xff0c;它就取得了巨大的成功。无论是常春藤法学考试还是商学院作业&#xff0c;ChatGPT都被用于各种试验。统计数据显示&#xff0c;ChatGPT每月吸引约9600万用户。随着ChatGPT的巨大成功&#xff0c;Open AI最近推出了它的最新版本&#xff0c;名为“…

数据库第一个实验

啦啦啦啦啦&#xff0c;数据库终于要实验了&#xff0c;很担心做不好&#xff0c;要是挂了怎么办 只是自己的作业&#xff0c;可能会有问题&#xff0c;欢迎前来指正 一、题目&#xff08;100分&#xff09; 一、创建后面给出的这6个表&#xff08;20分&#xff09; 二、用不同…

论文阅读_Segment_Anything

论文信息 name_en: Segment Anything name_ch: 切分任何东西 paper_addr: http://arxiv.org/abs/2304.02643 doi: 10.48550/arXiv.2304.02643 date_read: 2023-04-07 date_publish: 2023-04-05 tags: [‘深度学习’,‘多模态’] author: Alexander Kirillov, Meta AI Research…

用in函数嵌入子查询作为条件时查出结果为空

用in函数嵌入子查询作为条件时查出结果为空 问题&#xff1a; SELECT * FROM SGGCDB_VIEW sv WHERE RES_ID IN (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.ID_ 1069978138403930112 )结果未空值。 原因&#xff1a; 首先&#xff0c;SELECT u…

【Linux系统:进程控制】

目录 1 进程创建 1.1 fork函数 1.2 写时拷贝 1.3 fork常规用法 1.4 fork调用失败的原因 2 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 3 进程等待 3.1 进程等待必要性 3.2 进程等待的方法 3.2.1 wait方法 3.2.2 waitpid方法 3.3 获取子进程status 4 进程程序替…

有趣的小知识(四)从基站到天线:深入了解如何优化网站速度的关键技术

一、全面认识基站 1.1 基站的定义 基站是一种通信设施&#xff0c;用于提供无线通信服务。它通常由一座塔、天线、收发信设备、电源和辅助设备等组成&#xff0c;可以与移动设备&#xff08;如手机、平板电脑等&#xff09;进行无线通信。基站是是无线终端(如手机)接入互联网…

寻找CSDN平行世界的另一个你

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 寻找CSDN平行世界的另一个你摘要前言列表测试目的摘要 本文作了一个测试&#xff0c;看看在 CSDN 的博文中&#xff0c;艾特&#xff08;&#xff09;某个好友&#xff0c;TA是否能够…

为一副通用纸牌设计数据结构

为一副通用纸牌设计数据结构 大家好&#xff0c;我是易安&#xff0c;今天我们来聊一道笔试题&#xff0c;这也是我曾经面试华为时做过的题&#xff0c;今天分享给大家。 题目&#xff1a; 如何设计一个通用的扑克牌数据结构&#xff1f;请解释如何继承它来实现特定的扑克游戏…

国内外人工智能AI工具网站大全(一键收藏,应有尽有)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全&#xff08;一键收藏&#xff0c;应有尽有&#xff09;摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除…

分享10个前端开发者需要掌握的DOM技巧

Web开发不断发展&#xff0c;掌握最新的趋势和最佳实践对每位开发者来说都至关重要。Web开发的最重要方面之一就是使用文档对象模型&#xff08;DOM&#xff09;。在本文中&#xff0c;我们将探讨10个必须掌握的DOM技巧和技巧&#xff0c;配有代码示例&#xff0c;这将帮助您成…

Kotlin 是后端开发的未来

Kotlin 是后端开发的未来 严格类型、命名参数、多范式语言 您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来&#xff0c;您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor&#xff0c;所…

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤&#xff1a; 在Linux中安装Git在Linux中安装maven编写shell脚本&#xff08;拉取代码、编译、打包、启动&#xff09;为用户授予执行shell脚本的权限执行shell脚本 执行过程&#xff1a;Linux服务器&#xff08;编译、打包、启动&#x…

巧用千寻位置GNSS软件|点测量状态栏与工具栏全解析

众所周知&#xff0c;点测量是提供点位坐标多种模式测量、测量模式切换、测量数据简单成图等多种方式的点位地理信息测量功能。下面我们来解析在千寻位置GNSS软件中点测量功能下的各状态栏和工具栏。图5.1-1点击【测量】->【点测量】&#xff0c;如图5.1-1 所示&#xff0c;…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码&#xff1a;面向削峰填谷的电动汽车多目标优化调度策略 关键词&#xff1a;电动汽车 削峰填谷 多目标 充放电优化 参考文档&#xff1a;店主自己整理的说明文档&#xff0c;公式、约束、数据齐全&#xff0c;可联系我查看 仿真平台&#xff1a;MATLAB YA…

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的&#xff0c;那为什么又需要我们做透明度呢&#xff0c;原因就是咱们的设计小哥哥、小姐姐们没有自己做处理&#xff0c;如果处理了的话&#xff0c;我们直接使用设计标注的AHEX颜色就行&a…

Vue+echart 图根据网页自适应resize缩放

const chartBar null;data{return {chartBar :null} }//关键代码activated() {// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug// if (this.chartBar) {this.chartBar.resize();// }},chartBar echarts.init(document.getElementBy…

信息安全和网络安全

安全五要素&#xff1a; 机密 完整 并且能判断数据是否被篡改 可用 可控 可审查性 对于网络及网络交易&#xff0c;信息安全的基本需求是&#xff1a; 机密性完整性不可抵赖性 计算机系统安全保护的五个等级&#xff1a; 注释&#xff1a;其中的安全标记保护级是属于强…

【Spring】—Spring中Bean的配置、作用域

一、Bean的配置 Spring用于生产和管理Spring容器中的Bean&#xff0c;需要开发者对Spring的配置文件进行配置。在实际开发中&#xff0c;最常采用XML格式的配置方式&#xff0c;即通过XML文件来注册并管理Bean之间的依赖关系。 在Spring中&#xff0c;XML配置文件的根元素是…

深度学习在表面缺陷检测领域的应用

随着工业对原材料质量要求的提高&#xff0c;圆钢表面缺陷检测已成为工业生产的重要组成部分。 表面缺陷检测技术主要分为两类&#xff0c;即传统的无损检测方法和机器视觉检测方法&#xff0c;后者因其实时性和高精度而得到更广泛的应用。 作为现代工业生产的重要原材料&…