2009-11-24 104 views
1

我想通過Ruby腳本編譯java源文件。不過我有點通過以下行爲不解爲什麼我不能在Ruby中使用Backquotes/Backticks方法調用javac?

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都在PATH上。例如如果我從運行ruby腳本的shell手動運行javac,我可以到達java編譯器。 源文件存在。

我試過紅寶石1.8.7和1.9.1(Windows)。有人看到我失蹤的東西嗎?

更新: 我不認爲它與命令行參數有關。相反,它出於某種奇怪的原因無法獲得javac。我把行javac %1放在一個批處理文件中,並以通常的方式調用批處理文件。這工作...但仍然不確定整個問題與javac。

回答

-1

這裏有幾個可能的原因:

  1. SOURCE_FILE有空格的地方在 其名或路徑。向javac引用參數。
  2. source_file是相對路徑,但是 您無法從當前工作目錄獲取到相對路徑 。
+0

號「-help」不包含空格。不,如果javac在路徑上,那麼它是可訪問的。 – 2009-11-24 13:16:57

1

兩者之間的一個明顯區別是,您沒有運行帶有參數的csc

爲了更接近解決方案,寫一個JavaHelp.bat(或.cmd,如果你願意的話),把它放在路徑上,並從ruby調用它。

你可以嘗試的另一件事是明確調用java作爲javac.exe。儘管如此,我沒有多少希望,因爲csc沒有.exe也可以。

最後,你可以嘗試插入自己的shell:嘗試像

cmd /c javac -help

(在所有這一切,我假設你使用的是Windows)。

+0

是的委託批處理文件也是我想出來的......就在我去睡覺之前:)它也工作了......但仍然不確定這個問題的根本原因。 – Gishu 2009-11-25 12:33:30

1

看來,紅寶石在Windows不喜歡

`command -with-args` 

語法。您可以嘗試

%x[javac -help] 

%x[javaC#{source_file}] 

system 'javac', '-help' 

system 'javac', "#{source_file}" 
+1

沒有工作。同樣的錯誤。 – Gishu 2009-11-25 12:31:55

0

javac的可能是你的shell的路徑,但至於紅寶石而言在這實例不是。 Csc顯然是在你的路徑,並給你錯誤,因爲它應該但javac不會。

如果你只是運行javac它是否給你相同的ENOENT?如果是這樣,這只是一個路徑問題。 Ruby中的環境完全有可能與shell中的環境不同。你能打印出你的環境,並確保路徑實際上是正確的嗎?

最後,我不知道他們是否仍然使用它,我沒有在年齡使用Java,但不具有不同的路徑系統?我似乎記得你必須設置JAVA_HOME或其他東西,而不是路徑(或者除了路徑失敗以外)?

自從我上次使用windows以來,我一直都很擔心,如果這些都是死路一條,道歉。

+0

不,不再需要JAVA_HOME。一些Java程序喜歡看到它,但是Java(java,javac,javaw)會很高興地挖掘出可執行文件的路徑並從那裏推斷它的庫的位置。 – 2009-11-25 12:53:16

0

而是執行此操作:

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

而且隨着JDK的實際位置替換C:/Java_location。這應該可以工作,並且不需要額外的批處理文件。

相關問題