【问题标题】:Giving environment variables as arguments将环境变量作为参数
【发布时间】:2012-02-03 03:48:27
【问题描述】:

我有一个从命令行获取参数的 jar 文件,我想提供包含环境变量的参数。如下所示:

java -jar MyDev.jar -f %PROJECT_HOME%/src/test

但在上述情况下,程序会创建一个名为 %PROJECT_HOME% 的目录,但我希望系统中的 PROJECT_HOME 值是 /home/jack 路径。并且程序应该遵循/home/jack/src/test 而不是%PROJECT_HOME%/src/test 路径。

我该怎么做?

【问题讨论】:

  • 完全由shell来决定如何扩展命令行参数。 Java 可以进一步解析它们,但你最好弄清楚为什么你的 DOS shell 没有按预期运行。
  • 我尝试将 %USERPROFILE% 传递给一个简单的单行测试类,该类仅将输入参数打印到 System.out。就我而言,该变量已正确转换为我的主目录。在启动 java 程序之前,您是否确保通过 echo %PROJECT_HOME% 定义了您的变量?

标签: java windows environment-variables


【解决方案1】:

你是在 Unix shell 中运行它吗?如果是这样,我怀疑你只是想要:

java -jar MyDev.jar -f ${PROJECT_HOME}/src/test

使用% 是Windows 指定环境变量的方式——它似乎不适合/home/jack 的主目录...

【讨论】:

  • 我在 Windows 上运行,我给了 /home/jack 的例子。
  • @emin:首先明确说明这一点会很有帮助,然后使用更具代表性的示例...您是仅从命令提示符运行它,还是以其他方式启动它方式?
【解决方案2】:

负责环境变量替换的组件是外壳/命令行处理器(Windows 上为cmd.exe)。

我写了以下main方法:

public static void main(String[] args) {
    System.out.println(args[0]);
}

当我将“%PATH%”作为参数传递时,从 Eclipse 中运行它会打印出 %PATH%。从命令行运行它会打印出实际的路径环境变量。

请注意,您可以使用 System.getenv() 从 Java 代码中访问环境变量。 例如,System.out.println(System.getenv("PATH")) 从 Eclipse 和命令行打印出实际的路径变量。

【讨论】:

    【解决方案3】:

    一个很可能的原因可能是变量PROJECT_HOME 未定义或名称拼写错误。因此,除非您已经这样做了,否则您应该在启动 java 程序之前立即执行echo %PROJECT_HOME%,以确保定义了变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2016-01-22
      • 2019-09-02
      • 2021-01-21
      • 2021-01-03
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多