2012-01-05 210 views
2

我有一个从命令行获取参数的jar文件,我想给包含环境变量的参数。类似下面:给环境变量作为参数

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

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

我该怎么做?

+0

Windows或Unix – RanRag 2012-01-05 10:03:17

+0

它完全由shell来确定如何扩展命令行参数。 Java可以进一步解析它们,但是最好还是研究一下为什么你的DOS shell不像预期的那样工作。 – 2012-01-05 10:20:05

+0

我试着把%USERPROFILE%传递给一个简单的一行测试类,它只打印System.out的输入参数。在我的情况下,变量被正确地翻译成我的家庭目录。您是否确保在启动java程序之前通过执行'echo%PROJECT_HOME%'来定义变量? – Alderath 2012-01-05 10:23:51

回答

4

你在Unix shell中运行这个吗?如果是的话,我怀疑你只是想:

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

使用%被指定环境变量的Windows操作方式 - 这似乎不适合用/home/jack主目录...

+0

我在Windows上运行,例如,我给了/ home/jack。 – emin 2012-01-05 10:02:47

+0

@emin:首先明确说明这一点会很有帮助,然后使用更具代表性的示例......您是从命令提示符开始运行它,还是以其他方式启动它? – 2012-01-05 10:25:19

2

负责组件对于环境变量替换是shell /命令行处理器(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和命令行中输出实际路径变量。

0

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