如何让rJava在osx上使用较新版本的java?

如何让rJava在osx上使用较新版本的java?,java,r,rjava,Java,R,Rjava,以下是关于rJava的本教程: 我制作了教程中指定的所有文件并安装了helloJavaWorld包,但一旦运行helloJavaWorld()函数,它就会抱怨: > helloJavaWorld() Error in .jnew("HelloJavaWorld") : java.lang.UnsupportedClassVersionError: HelloJavaWorld : Unsupported major.minor version 52.0 因此,我尝试检查rJava使用

以下是关于rJava的本教程:

我制作了教程中指定的所有文件并安装了helloJavaWorld包,但一旦运行helloJavaWorld()函数,它就会抱怨:

> helloJavaWorld()
Error in .jnew("HelloJavaWorld") :
  java.lang.UnsupportedClassVersionError: HelloJavaWorld : Unsupported major.minor version 52.0
因此,我尝试检查rJava使用的java版本:

.jinit()
jvm = .jnew("java.lang.System")
jvm.props = jvm$getProperties()$toString()
jvm.props <- strsplit(gsub("\\{(.*)}", "\\1", jvm.props), ", ")[[1]]
jvm.props

 [1] "java.runtime.name=Java(TM) SE Runtime Environment"
 [2] "sun.boot.library.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries"
 [3] "java.vm.version=20.65-b04-466.1"
 [4] "awt.nativeDoubleBuffering=true"
 [5] "gopherProxySet=false"
 [6] "mrj.build=11M4716"
 [7] "java.vm.vendor=Apple Inc."
 [8] "java.vendor.url=http://www.apple.com/"
 [9] "path.separator=:"
[10] "java.vm.name=Java HotSpot(TM) 64-Bit Server VM"
[11] "file.encoding.pkg=sun.io"
[12] "user.country=US"
[13] "sun.os.patch.level=unknown"
[14] "java.vm.specification.name=Java Virtual Machine Specification"
[15] "user.dir=/private/tmp"
[16] "java.runtime.version=1.6.0_65-b14-466.1-11M4716"
[17] "java.awt.graphicsenv=apple.awt.CGraphicsEnvironment"
[18] "java.endorsed.dirs=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/endorsed"
[19] "os.arch=x86_64"
[20] "java.io.tmpdir=/var/folders/5d/44ctbbln4dsflgzxph1dm8wr0000gn/T/"
[21] "line.separator=\n"
[22] "java.vm.specification.vendor=Sun Microsystems Inc."
[23] "os.name=Mac OS X"
[24] "sun.jnu.encoding=MacRoman"
[25] "java.library.path=.:/Users/kaiyin/Library/Java/Extensions:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java"
[26] "java.specification.name=Java Platform API Specification"
[27] "java.class.version=50.0"
[28] "sun.management.compiler=HotSpot 64-Bit Tiered Compilers"
[29] "os.version=10.10"
[30] "http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16"
[31] "user.home=/Users/kaiyin"
[32] "user.timezone="
[33] "java.awt.printerjob=apple.awt.CPrinterJob"
[34] "file.encoding=MacRoman"
[35] "java.specification.version=1.6"
[36] "java.class.path=/Library/Frameworks/R.framework/Versions/3.1/Resources/library/rJava/java/boot:/Library/Frameworks/R.framework/Versions/3.1/Resources/library/helloJavaWorld/java"
[37] "user.name=kaiyin"
[38] "java.vm.specification.version=1.0"
[39] "java.home=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
[40] "sun.arch.data.model=64"
[41] "user.language=en"
[42] "java.specification.vendor=Sun Microsystems Inc."
[43] "awt.toolkit=apple.awt.CToolkit"
[44] "java.vm.info=mixed mode"
[45] "java.version=1.6.0_65"
[46] "java.ext.dirs=/Users/kaiyin/Library/Java/Extensions:/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext"
[47] "sun.boot.class.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar"
[48] "java.awt.headless=true"
[49] "java.vendor=Apple Inc."
[50] "file.separator=/"
[51] "java.vendor.url.bug=http://bugreport.apple.com/"
[52] "sun.io.unicode.encoding=UnicodeLittle"
[53] "sun.cpu.endian=little"
[54] "mrj.version=1070.1.6.0_65-466.1"
[55] "socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16"
[56] "ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16"
[57] "sun.cpu.isalist="
/Library/Frameworks/R.framework/Versions/3.1/Resources/etc/javaconf的内容

## Versions from settings when configure was run
: ${JAVA_HOME=}
: ${JAVA_CPPFLAGS=~autodetect~}
: ${JAVA_LD_LIBRARY_PATH=~autodetect~}
: ${JAVA_LIBS=~autodetect~}
/Library/Frameworks/R.framework/Versions/3.1/Resources/etc/ldpaths的内容

➜  etc  cat ldpaths
: ${JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre}
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/server}
if test -n ""; then
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:}
else
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib}
fi
if test -n "${R_JAVA_LD_LIBRARY_PATH}"; then
  R_LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${R_JAVA_LD_LIBRARY_PATH}"
fi
## This is DYLD_FALLBACK_LIBRARY_PATH on Darwin (OS X) and LD_LIBRARY_PATH elsewhere
if test -z "${DYLD_FALLBACK_LIBRARY_PATH}"; then
  DYLD_FALLBACK_LIBRARY_PATH="${R_LD_LIBRARY_PATH}"
else
  DYLD_FALLBACK_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${DYLD_FALLBACK_LIBRARY_PATH}"
fi
export DYLD_FALLBACK_LIBRARY_PATH

我通过在RForge上安装最新的源程序包解决了这个问题:

在R中:


我也有类似的问题,但这个解决方案对我不起作用。我最终让它工作了,但现在我不确定我改变的哪些东西解决了问题。以下是我所做的:

  • 我在我的
    .bash\u配置文件中添加了以下行:

    export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre"
    export LD_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/server 
    export PATH=$PATH:$JAVA_HOME/bin
    
  • 我在R中设置了我的
    java.home
    选项和我的
    DYLD\u FALLBACK\u LIBRARY\u PATH
    环境变量:

    options(java.home="/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk")
    Sys.setenv(DYLD_FALLBACK_LIBRARY_PATH="/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/server/")
    
  • 为了以防万一,我重新安装了苹果版本的Java 1.6,按照以下发布线程:

  • 我重新配置了R的java设置。在Bash中:
    R CMD javareconf
  • 我以root用户身份运行R,然后从源代码直接从RForge安装rJava。在Bash中:
    sudor
    。然后在R会话中:
    install.packages('rJava','http://www.rforge.net/)
    从源代码安装对于rJava了解R的新Java设置至关重要。当我没有从源代码安装时,rJava会安装ok,但它会继续使用JRE 1.6。您可以通过运行以下命令来检查JRE rJava使用了哪些JRE:

    library(rJava)
    .jinit()
    .jcall("java/lang/System", "S", "getProperty", "java.runtime.version")
    
    以root用户身份运行R对于从RForge源代码正确安装rJava至关重要。当我试图运行
    install.packages('rJava','http://www.rforge.net/)
    作为用户,我收到以下错误消息:

    • 如果在命令行中运行R,rJava将无法正确安装:

      checking JNI data types... configure: error: One or more JNI types differ from the corresponding native type. You may need to use non-standard compiler flags or a different compiler in order to fix this.
      ERROR: configuration failed for package ‘rJava’
      
    • 如果从Finder将R作为应用程序运行,rJava将安装但不加载:

      > library(rJava) 
      Error : .onLoad failed in loadNamespace() for 'rJava', details:  
      call: dyn.load(file, DLLpath = DLLpath, ...) 
      error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so': dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): 
      Library not loaded: @rpath/libjvm.dylib 
      Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so 
      Reason: image not found 
      Error: package or namespace load failed for ‘rJava’
      
    希望这个答案能为其他人节省一些时间

    编辑添加:我的两位教授按照这些说明操作,遇到了以下问题:rJava在命令行中运行R时可以工作,但在运行RStudio或默认Mac R应用程序时无法加载

    找到了解决办法。他写道:

    显然,RStudio抱怨必须使用苹果用来打开应用程序的默认用户/目录

    本文描述了它:

    [要解决此问题]请转到命令行并键入:
    open-a rstudio
    open-a R

    编辑第二条:我刚刚在一台学校电脑上安装了rJava,运行Ubuntu 14.04.4 LTS(64位)。当以root用户身份运行R时,我能够安装rJava。然而,当我尝试以用户身份运行R并加载包时,我得到了一个全新的加载错误:

    > library(rJava)
    Error : .onLoad failed in loadNamespace() for 'rJava', details:
        call: dyn.load(file, DLLpath = DLLpath, ...)
        error: unable to load shared object '/home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/libs/rJava.so':
        libjvm.so: cannot open shared object file: No such file or directory
      Error: package or namespace load failed for ‘rJava’
    
    我查了一下目录;rJava,确实存在。结果是我没有相应的权限:

    ...$ ls -l /home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/libs/rJava.so
    -rwxr-xr-x 1 root root 353325 Feb 26 16:58 /usr/lib/R/library/rJava/libs/rJava.so
    
    因此,我更改了权限:
    sudo chmod-ra+rX/home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/

    然后重新配置R的java设置:

    export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/lib/amd64:/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server
    sudo R CMD javareconf
    
    现在rJava加载,即使以用户而不是root用户身份运行R


    rJava:不断给出(配置错误)的包这里有一个对我来说非常有效的解决方案:

  • 在终端运行中: R CMD javareconf

  • 从输出中获取JAVA_主路径和JAVA库路径 范例

  • JAVA_HOME:/Library/JAVA/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/HOME/jre Java库路径:$(Java_HOME)/lib/server JNI cpp标志:-I$(JAVA\u HOME)/../include-I$(JAVA\u HOME)/../include/darwin JNI链接器标志:-L$(JAVA_HOME)/lib/server-ljvm 在/Library/Frameworks/R.framework/Resources中更新Java配置

  • 然后,确保没有RStudio的打开实例。我们将创建一个别名,该别名将以最新java版本的正确路径打开RStudio。把这个放在你的队伍里
  • 别名rstudio=“DYLD\u FALLBACK\u LIBRARY\u PATH=/LIBRARY/Java/JavaVirtualMachines/jdk1.8.0\u 65.jdk/Contents/Home/jre/lib/server open-a rstudio”

  • 在终端中键入rstudio

  • 完成了!Rstudio将指向正确的java版本打开


  • 关于rJava,有很多相互矛盾的信息。我对这些答案的担心是,一旦你开始玩弄
    JAVA\u HOME
    变量,你就有可能完全破坏JAVA安装——解决方案可能比疾病更糟糕。如果你有rJava问题,这里有一个简单的“无害”的方法

    1) 在终端中,运行
    R CMD javareconf
    。这是一个由R Core编写的脚本,它将“检测当前的Java设置并更新R中相应的配置。”看看内部结构

    2) 从源代码处重新安装rJava<代码>安装程序包(“rJava”,type=“source”)

    3) 从命令行打开R。加载rJava。从命令行()打开RStudio。加载rJava。你也会犯同样的错误吗?如果不是的话,那太好了——你越来越暖和了!您已将您的问题与RStudio隔离,而不是R本身

    4) RStudio和rJava有一些问题,涉及到-事实上,你知道吗,我甚至不打算试着完成那句话,因为坦率地说,这比我的工资等级高。动态库

    网上有很多关于这方面的文章(,,)。我最喜欢的标题是

    您的里程数可能会有所不同,但为了让RStudio玩得更好,我只需要回答一行代码,它所做的就是创建一个符号链接。无需更改权限,无需修改环境变量-只需一个简单的符号链接

    如果这对你不起作用,我建议你阅读
    > library(rJava)
    Error : .onLoad failed in loadNamespace() for 'rJava', details:
        call: dyn.load(file, DLLpath = DLLpath, ...)
        error: unable to load shared object '/home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/libs/rJava.so':
        libjvm.so: cannot open shared object file: No such file or directory
      Error: package or namespace load failed for ‘rJava’
    
    ...$ ls -l /home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/libs/rJava.so
    -rwxr-xr-x 1 root root 353325 Feb 26 16:58 /usr/lib/R/library/rJava/libs/rJava.so
    
    export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/lib/amd64:/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server
    sudo R CMD javareconf