简体   繁体   中英

R looking for the wrong java version

I installed/uninstalled java jre/jdk now many times and finally installed the older version 1.6.0_17 which is now located at "C:\Program Files\Java\jre6\bin". Now after all if I call 'java -version' within R i can see that R is looking for Java at the old path which is now wrong. The question is: Why is R looking for Java at the wrong path even so the windows path is set correctly? There are no double entrys within the windows path as far as I can see and I restarted R as well as Windows more then once since then. Any Ideas where R takes the wrong path from?

On 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)

within R:

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

You're assuming that R is looking at the windows path, but the code is telling you that it's not. So check your assumption: R is getting the path somewhere else.

If I open up a command shell on my Windows machine and type "java -version" I get this:

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)

If I check the PATH on my machine, I get (edited for clarity):

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

If I open up R version 2.8.1 and run system("java -version") I get this:

> 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)
>

So, like I said, R is not using my path to find java.exe. It's using something else.

You problem depends on 64/32 bit versions.
You run 32-bit R, which use 32-bit command prompt and find 32-bit java. If you use 64-bit R then it runs 64-bit command promt and proper java.

You could check it by run 32-bit command promt (following this post ):

  1. Click Start.
  2. Type %windir%\\SysWoW64\\cmd.exe in Start Search box.
  3. Press Enter.
  4. Type java -version

In my system it fails because I don't have 32-bit java. With standard cmd.exe I get proper path.

For possible solution there are two ways. Install 32-bit R and 32-bit Java or 64-bit R (which is officially supported from 2.11 version ) and 64-bit Java. On my system (64-bit Windows 7) I've got both sets, so on 32-bit combination I get:

> 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)

And on 64-bit:

> 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)

On 64-bit version you could call 32-bit Java using 32-bit cmd:

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)

About Shane's comment I think the question is how R get path to 32-bit cmd. Because I can't find a way to call 64-bit cmd on 32-bit R.

I got to this page trying to work out why my JDK was reporting 64 bit despite the PATH and JAVA_HOME were pointing to 32 bit.

I dont even know what R is, but this article might help (it solved it for me)

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

In a nutshell, dont run from 'cmd' use '%windir%\\SysWoW64\\cmd.exe' instead. Or, put your JDK at the front of the path instead of the end (I dont think this is ideal).

You may also need to check the registry, R may have its own setting. You can also start regedit and do a search on the path to binary that it is starting.

There is a simple way to check which version of Java you have installed on your computer using the rJava package.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM