如何从命令行将数组arg传递给Groovy JAR?

时间:2014-07-30 14:07:34

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

我的Groovy应用程序包含以下代码:

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

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

请注意 props随着时间的推移会增长很长(10多个元素)。

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

然后从命令行:

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

答案 1 :(得分:3)

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

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

并将其命名为:

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

答案 2 :(得分:0)

您是否考虑过使用属性文件并使用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传递命令行参数

e.g。

之类的东西
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