簡體   English   中英

R找錯java版本

[英]R looking for the wrong java version

我安裝/卸載了 java jre/jdk 很多次,最后安裝了舊版本 1.6.0_17,它現在位於“C:\Program Files\Java\jre6\bin”。 畢竟,如果我在 R 中調用“java -version”,我可以看到 R 正在舊路徑上尋找 Java,但現在這是錯誤的。 問題是:為什么 R 在錯誤的路徑上尋找 Java 即使 windows 路徑設置正確? 據我所知,windows 路徑中沒有重復條目,從那以后我又重新啟動了 R 和 Windows 一次。 R 走錯路的任何想法?

在 windows shell 上:

> set
[..]
OS=Windows_NT
Path=C:\Program Files\Java\jre6\bin;
[..]


> java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)

R內:

> system("java -version")
Error: could not open `C:\Program Files (x86)\Java\jre6\lib\i386\jvm.cfg'

您假設 R 正在查看 windows 路徑,但代碼告訴您事實並非如此。 因此,請檢查您的假設:R 正在其他地方獲取路徑。

如果我在我的 Windows 機器上打開一個命令外殼並輸入“java -version”,我會得到這個:

C:\>java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

如果我檢查機器上的 PATH,我會得到(為了清晰起見進行了編輯):

C:\>set path
Path=;C:\JDKs\jdk1.6.0_13\bin;

如果我打開 R 版本 2.8.1 並運行 system("java -version") 我得到這個:

> system("java -version")
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
>

所以,就像我說的,R 沒有使用我的路徑來查找 java.exe。 它正在使用其他東西。

您的問題取決於 64/32 位版本。
您運行 32 位 R,它使用 32 位命令提示符並找到 32 位 java。 如果您使用 64 位 R,那么它會運行 64 位命令提示符和正確的 java.lang.

您可以通過運行 32 位命令提示符來檢查它(在這篇文章之后):

  1. 單擊開始。
  2. 在開始搜索框中鍵入%windir%\\SysWoW64\\cmd.exe
  3. 按 Enter。
  4. 輸入java -version

在我的系統中它失敗了,因為我沒有 32 位 java。 使用標准 cmd.exe 我得到正確的路徑。

對於可能的解決方案,有兩種方法。 安裝 32 位 R 和 32 位 Java 或 64 位 R( 從 2.11 版本正式支持)和 64 位 Java。 在我的系統(64 位 Windows 7)上,我有兩套,所以在 32 位組合上我得到:

> system("java -version")
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

在 64 位上:

> system("java -version")
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

在 64 位版本上,您可以使用 32 位 cmd 調用 32 位 Java:

shell(
    "java -version",
    shell = file.path(Sys.getenv("windir"),"SysWoW64/cmd.exe")
)
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

關於 Shane 的評論,我認為問題是 R 如何獲得 32 位 cmd 的路徑。 因為我找不到在 32 位 R 上調用 64 位 cmd 的方法。

我來到這個頁面試圖弄清楚為什么我的 JDK 報告 64 位,盡管 PATH 和 JAVA_HOME 指向 32 位。

我什至不知道 R 是什么,但這篇文章可能會有所幫助(它為我解決了這個問題)

http://www.tipandtrick.net/2008/how-to-open-and-run-32-bit-command-prompt-in-64-bit-x64-windows/

簡而言之,不要從 'cmd' 運行,而是使用 '%windir%\\SysWoW64\\cmd.exe'。 或者,將您的 JDK 放在路徑的前面而不是末尾(我認為這不理想)。

您可能還需要檢查注冊表,R 可能有自己的設置。 您還可以啟動 regedit 並在它啟動的二進制路徑上進行搜索。

有一種簡單的方法可以使用rJava package 檢查您的計算機上安裝了哪個版本的 Java。

  rJava::.jinit()
  rJava::.jcall("java.lang.System", "S", "getProperty", "java.version")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM