R正在查找错误的java版本

R正在查找错误的java版本,java,windows,r,Java,Windows,R,我现在多次安装/卸载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外壳上: > set [..] O

我现在多次安装/卸载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外壳上:

> 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机器上打开一个命令shell并键入“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)
> 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版本2.8.1并运行system(“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)
> 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。它在用别的东西

您可能还需要检查注册表,R可能有自己的设置。您还可以启动regedit并在其启动的二进制文件路径上进行搜索。

您的问题取决于64/32位版本。
运行32位R,它使用32位命令提示符并查找32位java。如果您使用64位R,那么它将运行64位命令promt和适当的java

您可以通过运行32位命令promt(如下所示)进行检查:

  • 单击开始
  • 在开始搜索框中键入
    %windir%\SysWoW64\cmd.exe
  • 按回车键
  • 键入
    java-version
  • 在我的系统中,它失败了,因为我没有32位java。使用标准cmd.exe,我可以获得正确的路径

    对于可能的解决方案,有两种方法。安装32位R和32位Java或64位R(即)和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位,尽管路径和JAVA_HOME指向32位

    我甚至不知道R是什么,但这篇文章可能会有所帮助(它为我解决了这个问题)

    简而言之,不要从“cmd”运行,而是使用“%windir%\SysWoW64\cmd.exe”。
    或者,将JDK放在路径的前面而不是末尾(我认为这并不理想)。

    OP从R中运行
    system
    命令,该命令`调用'command'指定的OS命令'。换言之,它正在使用路径。@Shane,我的观点是,他自己的帖子告诉我们Windows路径设置为什么,但R本身没有使用该值。因此,我的评论是,它没有使用路径指向的内容。“换句话说,它正在使用路径。-R不同意您的观点。@达菲莫:谢谢您的额外编辑;我得到了相同的行为。非常奇怪!
    system
    应该只是在cmd提示符上运行操作。是的,这正是重点!问题是R如何获得java路径。@Shane
    system
    使用命令promt,但是re是其中的两个:32位和64位。请检查我的答案。您使用的是什么版本的windows?是64位吗?在我看来,问题在于java配置,而不是R。请尝试用谷歌搜索错误。如果使用系统(“C:\Program Files\java\jre6\bin\java.exe-version”),会发生什么情况,是否有效?。您的路径上是否有其他java.exe实例?(参见此问题:)你说得对!…所以编译64位的R版本是唯一的解决方案?我认为R 32位版本应该可以。@Veit你可以使用java的完整路径,正如Leo Alekseyev在他对你的问题的评论中所说的那样。但是它是否有帮助取决于你尝试做什么。而且R的官方64位版本即将发布:@Marek:出于好奇:你知道吗知道64位cmd.exe的
    路径从哪里来吗?使用R 64位版本似乎对我没有帮助。如果我在64位R版本中调用“library(rJava)”,则返回“错误:没有为'arch=x64'安装包'rJava'。因此我仍然必须修复R使用的java路径。或者是否有其他解决方案?