我的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
但现在确定如何从命令行指定一个字符串数组。有什么想法吗?
答案 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