在Windows上的Gradle Java应用程序中的命令行参数中传递JSON(双引号括起的元素和值)

lmyy7pcs  于 2022-12-13  发布在  Windows
关注(0)|答案(1)|浏览(149)

我正在尝试将JSON字符串命令行参数传递到我的Gradle Java应用中。JSON解析器出错,因为Gradle似乎在去除JSON字符串中的双引号。以以下代码为例:

public static void main(String[] args)
{
    for (String arg : args) {
        String msg = "commandline arg: " + arg;
        System.out.println(msg);
    }
}

...和以下输出:

> java MyApp '{"firstName":"Rocky", "lastName":"Balboa"}'
commandline arg: {firstName:Rocky, lastName:Balboa}

> java MyApp '{\"firstName\":\"Rocky\", \"lastName\":\"Balboa\"}'
commandline arg: {"firstName":"Rocky", "lastName":"Balboa"}

使用反斜杠转义在JVM中可以正常工作,但在Gradle中就不太适用了:

> gradle clean execute -DmainClass='MyApp' --args='{"firstName":"Rocky","lastName":"Balboa"}'
commandline arg: {firstName:Rocky,lastName:Balboa}

> gradle clean execute -DmainClass='MyApp' --args='{\"firstName\":\"Rocky\",\"lastName\":\"Balboa\"}'
commandline arg: {firstName:Rocky,lastName:Balboa}

是否有方法指示Gradle将这些双引号视为文字?

a8jjtwal

a8jjtwal1#

尝试在生成脚本的JavaExec中定义参数

task run(type:JavaExec) {
    main = "com.abc.xyz.Main"
    classpath = sourceSets.main.runtimeClasspath
    args System.getProperty("args")
    print("my args "+args);
}

并使用gradle命令- gradle运行-Dargs="{“名称”:“xyz”,“标识”:“123”}”

相关问题