【问题标题】:How to pass an array arg to a Groovy JAR from command line?如何从命令行将数组 arg 传递给 Groovy JAR?
【发布时间】:2014-09-22 05:20:36
【问题描述】:

我的 Groovy 应用有以下代码:

def doSomething() {
    def props = [
        "fizz",
        "buzz"
    ]

    // Do something with 'props'...
}

请注意props 可能会随着时间的推移变得相当长(10 多个元素)。

我现在想从命令行的开关读取props(因此,作为系统属性)。所以我希望我的代码是 something 像这样:

def doSomething() {
    def props = System.getProperty("props")

    // Do something with 'props'...
}

所以我可以通过以下方式运行应用程序:

java -Dprops=??? -jar myapp.jar

但现在确定如何从命令行指定字符串数组。有什么想法吗?

【问题讨论】:

  • java -Dprops="hi"-jar myapp.jar 但我不知道 groovy
  • 感谢@madhawapriyashantha,但我认为您根本没有阅读我的问题。 props 是一个数组。 "hi" 只是一个字符串...
  • 好的,那么您可以像这样传递 java -DpProp1=sp1 -DpysProp2=sp2 -jar myapp.jar。但是您必须从您的代码中逐个捕获并从一系列 srings 创建数组。
  • 我没有点赞
  • 我不明白为什么这被否决了。这绝对是一个具有有效答案的有效问题。

标签: java groovy jar command-line-arguments system-properties


【解决方案1】:

似乎没有对此的内置支持,所以我最终选择了:

System.getProperty("props").split(";")

然后从命令行:

java -Dprops="fizz;buzz;etc" -jar myapp.jar

【讨论】:

  • 感谢@dmahapatro,但请耐心等待!我无法在 24 小时内将自己的答案标记为正确 ;-)
【解决方案2】:

正如你所说,没有内置支持,但你可以试试这个:

 ArrayList props = System.getProperty("props").replaceAll("\\[","").replaceAll("]","").split(",")

并调用它:

java -Dprops="['fizz','buzz']" -jar myapp.jar

【讨论】:

    【解决方案3】:

    您是否考虑过使用属性文件和使用 ConfigSlurper 例如像

    File configFile = new File(configDir, 'config.groovy')
    ConfigObject config = new ConfigSlurper().parse(configFile.toURI().toURL())
    def props = config.props
    

    config.groovy 的样子

    props = ["fizz","buzz","etc"]
    

    或者使用 CliBuilder 传递命令行参数

    例如像

    CliBuilder cli = new CliBuilder(usage: "blah:")
    cli.p(argName: 'prop', longOpt: 'prop', args: Option.UNLIMITED_VALUES, required: true, valueSeparator: ',', '')
    def options = cli.parse(args)
    def props = options.ps // ps gives you all the -p args
    

    然后

    java -jar myapp.jar -p fizz,buzz,etc
    or alternate allowed syntax
    java -jar myapp.jar -p fizz -p buzz -p etc
    

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多