代码之家  ›  专栏  ›  技术社区  ›  Gishu

为什么我不能在Ruby中使用反引号/反勾号方法调用javac?

  •  1
  • Gishu  · 技术社区  · 16 年前

    我试图通过Ruby脚本编译java源文件。然而,我对以下行为有点困惑

    compile_results = `javac  #{source_file}`
    

    “没有这样的文件…”时无法运行错误我突然出现了irb

    irb(main):001:0> `javac -help`
    Errno::ENOENT: No such file or directory - javac -help
            from (irb):1:in ``'
            from (irb):1
    
    irb(main):002:0> `csc`
    => "Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.3053\nfor Microsoft
     (R) Windows (R) 2005 Framework version 2.0.50727\nCopyright (C) Microsoft Corpo
    ration 2001-2005. All rights reserved.\n\nfatal error CS2008: No inputs specifie
    d\n"
    

    然而,javac和csc都在发展中。e、 如果我从运行ruby脚本的shell中手动运行javac,我就能够访问java编译器。 源文件存在。

    更新: 我认为这与命令行参数无关。相反,由于一些奇怪的原因,它无法进入javac。我把线 javac %1 并以通常的方式调用批处理文件。这起作用了。。。但仍然不确定javac的整个问题是什么。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Carl Smotricz    16 年前

    两者之间的一个明显区别是你没有跑步 csc 有一个论点。

    为了更接近解决方案,写一个 JavaHelp.bat (或 .cmd 如果你愿意的话),把它放在路径上,从ruby中调用它。

    javac.exe . 尽管如此,我对此没有太大希望 csc公司 没有 .exe 同样有效。

    最后,您可以尝试插入自己的shell:尝试以下操作

    cmd /c javac -help

    (在所有这一切中,我假设你在Windows上)。

        2
  •  1
  •   James A. Rosen    16 年前

    Windows上的Ruby似乎不喜欢

    `command -with-args`
    

    语法。你可以试试

    %x[javac -help]
    

    %x[javac #{source_file}]
    

    system 'javac', '-help'
    

    system 'javac', "#{source_file}"
    
        3
  •  0
  •   Chuck Vose    16 年前

    Javac可能在您的shell路径中,但就Ruby而言,在本例中它不是。Csc显然在您的路径中,并给您提供了它应该提供的错误,但Javac没有。

    如果你只是跑 javac 它给你同样的信息吗?如果是这样,那只是一个路径问题。Ruby中的环境完全可能不同于shell中的环境。您能打印出您的环境并确保路径实际上是正确的吗?

    最后,我不知道他们是否还在使用它,我已经很久没有使用java了,但是java难道没有不同的路径系统吗?我似乎记得,您必须将JAVA_设置为HOME或其他内容,而不是路径(或者在路径失败的情况下添加)。

    我上次使用windows已经有一段时间了,如果这些都是死胡同,请道歉。

        4
  •  0
  •   Geo    16 年前

    改为:

    `C:/java_location/bin/javac.exe arguments`
    

    并更换 C:/Java_location 与JDK的实际位置。这应该可以工作,并且您不需要额外的批处理文件。

        5
  •  -1
  •   Alexander Pogrebnyak    16 年前

    以下是几个可能的原因:

    1. source_文件中的某处有空格 其名称或路径。引用javac的参数。
    2. source_文件是一个相对路径,但是 从您当前的工作目录。