ITPub博客

首页 > 数据库 > 数据库开发技术 > Scala中如何自定义命令行参数

Scala中如何自定义命令行参数

原创 数据库开发技术 作者:招牌鸡蛋面 时间:2022-04-12 20:00:00 0 删除 编辑


在实际的大数据项目中,有很多应用场景是运行某些jar包需要外部传参的,今天就学习一下如何在Scala代码中实现命令行传参的功能。


本次介绍的工具包是:args4j


由于我的Scala项目是用sbt工具构建,所以:


第一步:引入依赖 


在build.sbt文件中添加下面的第10行

ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.12.15"
lazy val root = (project in file(".")) .settings( name := "cmdlineparser20220412" )
libraryDependencies += "args4j" % "args4j" % "2.33"


第二步:导包 


这里我的所有代码都在CMDLineArgs.scala中

import org.kohsuke.args4j.{CmdLineException, CmdLineParser, Option}


第三步:定义参数列表 


这里我定义了下面三个参数: cloudProvider, vmCount和configFile


@Option()里三个参数需要你配置一下:


name: 字符串类型,你的自定义参数名,就是给你参数起个名字


required: 布尔类型,该参数是否必须


usage: 字符串类型,就是该参数的用法说明


下面是定义参数变量,并指定类型和初始化

‍

object Args {  @Option(    name = "-cloudProvider",    required = true,    usage = "Please type which cloud you are using? For example: Azure | AWS"  )  var cloudProvider: String = null
@Option( name = "-vmCount", required = true, usage = "How many VMs you want to create?" ) var vmCount: Int = -1
@Option( name = "-configFileName", required = true, usage = "Please type the vm config file name." ) var configFileName: String = null
}


第四步:定义main函数调用自定义参数object


object CMDLineArgs {  def main(args: Array[String]): Unit = {    val parser = new CmdLineParser(Args)    try {      parser.parseArgument(JavaConverters.asJavaCollection(args))    } catch {      case e: CmdLineException =>        print(s"Error: ${e.getMessage}\n Usage:\n")        parser.printUsage(System.out)        exit(1)    }    println(Args.cloudProvider)    println(Args.vmCount)    println(Args.configFileName)  }}


我们先来不传任何参数,直接运行scala代码,来看看什么效果:



可以看到错误提示:-cloudProvider这个选项参数是必须的

下面还打印出来了我们在定义参数时,在usage里写的参数使用说明


那如何在运行时传入参数呢?Intellij IDEA提供了此功能,我们只需要打开Edit Configuration...,在里面填入参数以及参数值即可。




   注意:

- 参数与参数之间用空格隔开

- 参数名与参数值之间用=


点击OK保存,再跑一遍代码,看看输出结果:



输出结果不太漂亮,改一下代码,调整一下输出格式:


    ...    println("Cloud Provider: " + Args.cloudProvider)    println("vm Count: " + Args.vmCount)    println("vm Config File: " + Args.configFileName)    ...


再跑一遍,这次输出结果好看多了!



好了,今天的分享就到这里!如果本文对你有帮助?点击关注公众号:BPShare,不错过任何分享!

想请我喝咖啡?👇

原文作者:BPShare;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
干过测试,做过运维,还兼职过售前+投标+实施+售后+客户培训。前两年入坑大数据开发,熟悉Azure + Databricks大数据相关产品。 喜欢研究技术,所以搞了一个公众号:BPShare,分享一些经验和心得。欢迎骚扰~~~

注册时间:2020-02-17

  • 博文量
    90
  • 访问量
    44237