【问题标题】:How to pass system properties to self-contained Java applications on the command line如何在命令行上将系统属性传递给自包含的 Java 应用程序
【发布时间】:2015-06-07 16:02:23
【问题描述】:

我有一个使用javapackager 工具(8.0 版,Windows)打包的独立Java 应用程序。如何在命令行上的应用程序运行时(而不是打包时)传递系统属性值?

The doc 似乎没有解决这个问题。

我尝试了标准的 Java 方式,如下所示:

mypackagedapp.exe -Dmyprop=myvalue

但这似乎没有效果。

【问题讨论】:

  • “似乎没有效果”是什么意思?你打算如何收回财产?此外,我强烈怀疑标准 Java 方式是否包括运行 exe-file。
  • System.getProperty("myprop") 返回空值。当我使用 java.exe -Dmyprop=myvalue -jar... 调用我的代码时,它按预期返回“myvalue”
  • @Tobb:我发布的链接相同??它如何解决我的问题?你能详细说明一下吗?
  • FWIW,我刚刚发布了一个 similar but more general question,关于通过 JavaFX 自包含应用程序启动器将参数传递给 JVM,其中包括系统属性。

标签: java


【解决方案1】:

这是一个验证命令行中是否存在参数的代码。

看看下一个代码能不能帮到你。

public static void main(final String[] args) throws Exception {

    CommandLine line = validateArgs(args);
    if (null == line) {
        return;
    }
}

private static CommandLine validateArgs(String[] args) {
    Options flags = getArgs();
    CommandLineParser parser = new BasicParser();
    CommandLine line = null;

    try {
        // parse the command line arguments
        line = parser.parse(flags, args);
        if (line == null) {
            return null;
        }
    } catch (ParseException exp) {
        System.out.println(exp.getMessage());
    }
    return line;

}

static Options getArgs() {
    Options flags = new Options();
    Option dmyprop = OptionBuilder.withArgName("dmyprop")
            .hasArg()
            .withDescription("add description")
            .create("Dmyprop");
    flags.addOption(dmyprop);

    return flags;
}

为了获取你需要使用的环境变量:

        String env = System.getenv(option);

option 是您想要的环境变量。

希望对您有所帮助。

【讨论】:

  • 您能解释一下您的代码中发生了什么吗?
  • @Igor:谢谢!我知道我可以编写自己的解析来设置系统属性。我很难相信一旦您将应用程序打包为独立的,Java 就会停止为您做这件事。所以我想我希望得到一个答案,要么显示 Java 在自包含应用程序的情况下如何做到这一点,要么指出这是自包含应用程序的记录限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多