Как я могу заставить rJava использовать новую версию java для osx?

Я следую этому руководству по rJava: http://cran.r-project.org/web/packages/helloJavaWorld/vignettes/helloJavaWorld.pdf

Я сделал все файлы, как указано в учебнике, и установил пакет helloJavaWorld, но как только я запустил функцию helloJavaWorld (), он жалуется:

> helloJavaWorld() Error in .jnew("HelloJavaWorld") : java.lang.UnsupportedClassVersionError: HelloJavaWorld : Unsupported major.minor version 52.0 

Поэтому я попытался проверить версию java, используемую rJava:

 .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=" 

Похоже, что он использует java 1.6 (предварительно установленный в OSX), но я скомпилировал class HelloJavaWorld с java 1.8, что приводит к вопросу: как я могу заставить rJava использовать более новую версию java?

Выход R CMD javareconf :

 Java interpreter : /usr/bin/java Java version : 1.8.0_25 Java home path : /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre Java compiler : /usr/bin/javac Java headers gen.: /usr/bin/javah Java archive tool: /usr/bin/jar Non-system Java on OS X trying to compile and link a JNI progam detected JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/../include/darwin -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -fPIC -Wall -mtune=core2 -g -O2 -c conftest.c -o conftest.o clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation JAVA_HOME : /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre Java library path: $(JAVA_HOME)/lib/server JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm Updating Java configuration in /Library/Frameworks/R.framework/Resources Done. 

Содержание /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 

    Существует много противоречивой информации о rJava на SO. Мое беспокойство в связи с множеством этих ответов заключалось в том, что, как только вы начнете обезвреживание с помощью переменных JAVA_HOME , вы рискуете полностью разорвать свою установку Java – решение может быть хуже, чем болезнь. Вот краткое изложение «не навреди», что вы можете сделать, если у вас проблемы с rJava.

    1) в терминале, запустите R CMD javareconf . Это сценарий, написанный R Core, который будет «Обнаруживать текущую настройку Java и обновить соответствующую конфигурацию в R.» Взгляните на внутренности здесь .

    2) переустановите rJava из источника. install.packages("rJava", type = "source") .

    3) Откройте R из командной строки. Загрузите rJava. Откройте RStudio из командной строки ( направлений ). Загрузите rJava. Вы получаете ту же ошибку? Если нет, здорово – вы становитесь теплее! Вы изолировали свою проблему от проблемы с RStudio , а не с самим R.

    4) Есть какая-то проблема с RStudio и rJava, которая касается – на самом деле, вы знаете, что я даже не собираюсь пытаться закончить это предложение, потому что, откровенно говоря, это выше моего уровня зарплаты. Динамические библиотеки что-то.

    В Интернете есть куча писем ( здесь , здесь , здесь и здесь ). Мой любимый титул был « кошмар rJava ».

    Ваш пробег может отличаться, но этот SO-ответ был всем, что мне нужно, чтобы заставить RStudio играть хорошо – одна строка кода на терминале, и все, что он делает, создает символическую ссылку. Никаких изменений в разрешениях, без изменения переменных окружения – просто простая символическая ссылка.

    Если это не сделает это за вас, я бы посоветовал прочитать связанные сообщения в блоге выше, прежде чем вы начнете копировать / вставлять множество этих сработанных для меня ответов, заполненных через SO.

    У меня была аналогичная проблема, но это решение не сработало для меня. В конце концов, я начал работать, но теперь я не уверен, какая из вещей, которые я изменила, решила проблему. Вот что я сделал:

    1. Я добавил следующие строки в мой .bash_profile :

       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 
    2. Я установил свой параметр java.home и мою переменную окружения DYLD_FALLBACK_LIBRARY_PATH в R:

       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/") 
    3. Я заново установил версию Java 1.6 от Java на всякий случай, согласно этой теме: https://github.com/su/rJava/issues/37

    4. Я переконфигурировал настройки java. В Bash: R CMD javareconf
    5. Я запустил R как root, а затем установил rJava из источника, непосредственно из RForge. В Bash: sudo R Затем в сеансе R: install.packages('rJava',,'http://www.rforge.net/') .

    Установка из исходного кода имеет решающее значение для того, чтобы rJava забирал новые настройки Java R. Когда я не установил из исходного кода, rJava установил нормально, но он будет продолжать использовать JRE 1.6. Вы можете проверить, какой JRE rJava использует, запустив:

     library(rJava) .jinit() .jcall("java/lang/System", "S", "getProperty", "java.runtime.version") 

    Запуск R в качестве корня имеет решающее значение для правильной установки rJava из источника RForge. Когда я пытался запустить 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' 
    • Если запустить R в качестве приложения из Finder, 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 ворчит о том, что нужно использовать пользовательский / каталог по умолчанию, который Apple использует для открытия приложений.

    Эта статья описывает это: http://jeromyanglim.tumblr.com/post/34221143729/how-to-run-rstudio-from-the-command-line-on-osx

    [Чтобы исправить проблему] Перейдите в командную строку и введите: open -a rstudio или open -a R

    Изменить номер два : я только что установил rJava на одном из школьных компьютеров, запустив Ubuntu 14.04.4 LTS (64-разрядный). Я смог установить rJava при запуске R как root. Однако, когда я попытался запустить 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.so определенно существует. Оказалось, что у меня не было прав для этого:

     ...$ 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 -R a+rX /home/lizziesilver/R/x86_64-pc-linux-gnu-library/3.2/rJava/

    Затем переконфигурировали настройки 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 загружается, даже при запуске R в качестве пользователя вместо корня!

    rJava: пакет, который продолжает давать (ошибки конфигурации)

    Я решил проблему, установив из последнего исходного пакета на RForge: http://www.rforge.net/rJava/files/

     cd /tmp wget http://www.rforge.net/rJava/snapshot/rJava_0.9-7.tar.gz R CMD INSTALL rJava_0.9-7.tar.gz 

    В R:

     > library(helloJavaWorld) Loading required package: rJava > helloJavaWorld() [1] "Hello from java!" 

    Вот решение, которое очень хорошо работало для меня:

    1. В терминальном запуске: R CMD javareconf

    2. Получить путь JAVA_HOME и путь библиотеки Java из выходного примера

    JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre Путь библиотеки Java: $ (JAVA_HOME) / lib / сервер JNI cpp flags: -I $ (JAVA_HOME) /../ include -I $ (JAVA_HOME) /../ include / darwin Флаги компоновщика JNI: -L $ (JAVA_HOME) / lib / server -ljvm Обновление конфигурации Java в /Library/Frameworks/R.framework/Resources

    1. Затем убедитесь, что у вас нет открытого экземпляра RStudio. Мы создадим псевдоним, который откроет RStudio с правильным путем до последней версии java. Запустите это в своей положительной линии

    alias rstudio = “DYLD_FALLBACK_LIBRARY_PATH = / Библиотека / Java / JavaVirtualMachines / jdk1.8.0_65.jdk / Содержание / Главная / jre / lib / server open -a RStudio”

    1. Тип rstudio в терминале

    2. Готово! Rstudio откроется, указывая на правую версию java

    Давайте будем гением компьютера.