R CMD javareconf未找到jni.h

R CMD javareconf未找到jni.h,java,r,rjava,Java,R,Rjava,我正试图在一个基于debian(jessie)和Anaconda的docker容器中安装rJava 作为根,我做到了 $ apt-get update && apt-get install -y --no-install-recommends \ default-jdk default-jre libicu-dev 然后 它看起来不像是javareconf找到了它。而且,如果我看一下我可以用javareconf设置的所有变量,比如JAVA_HOME,我看不到设置JNI

我正试图在一个基于debian(jessie)和Anaconda的docker容器中安装rJava

作为根,我做到了

$ apt-get update  && apt-get install -y --no-install-recommends \
  default-jdk default-jre libicu-dev 
然后

它看起来不像是
javareconf
找到了它。而且,如果我看一下我可以用javareconf设置的所有变量,比如JAVA_HOME,我看不到设置JNI cpp标志的能力,这需要正确的include


我在互联网上看到过这个问题,但没有解决方案。

R正在寻找不同的位置:

detected JNI cpp flags    : -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux
我也遇到过类似的问题,但安装jdk后一切都很好:

sudo apt-get install openjdk-8-jdk

有同样的问题。通过指定Java文件夹的路径进行修复。简单地说,在安装Java之后,您可能会得到这样一行代码

update-alternatives: using /usr/lib/jvm/java-9-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode
在调用javareconf时,我将该路径指定为JAVA_HOME参数,如下所示

sudo R CMD javareconf JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64/bin/jar

希望这是有用的

我通过编辑java配置文件解决了这个问题

sudo nano /usr/lib/R/etc/javaconf

set the correct JAVA_HOME in this row:
: ${JAVA_HOME=/usr/local/java/jdk-9.0.1}

我已经在Ubuntu18.04上安装了Java 11,但必须按照以下指南安装jdk-11.0.1:

然后我在javaconf中更改了JAVA_HOME,就像@Spanska Forteva一样

sudo nano /usr/lib/R/etc/javaconfIn javaconf 
我发现到旧版本java的路径仍然被指定

## Versions from settings when configure was run
: ${JAVA_HOME=/usr/lib/jvm/default-java}
: ${JAVA_CPPFLAGS=~autodetect~}
: ${JAVA_LD_LIBRARY_PATH=~autodetect~}
: ${JAVA_LIBS=~autodetect~}
我将JAVA_HOME的路径更改为新安装的jdk:

: ${JAVA_HOME=/usr/lib/jvm/jdk-11.0.1}
然后使用指定的jni.h路径运行CMD:

sudo R CMD javareconf /usr/lib/jvm/jdk-11.0.1/include/jni.h

最后一位可能不需要,它应该能够在该文件夹中查找,但这就是我所做的。

也有同样的问题,最终可以解决它。经过大量的搜索,这对我很有效(我基本上遵循了这里的指南:):

  • 下载JDK(jdk1.8.0_201)并将其解包到/usr/java/
  • 下载JRE(jre1.8.0_201)并将其解包到/usr/java/(不确定是否需要此步骤,但我在以前解决此问题的尝试中已完成此步骤)
  • 使用合适的版本通知Ubuntu新的java
为此,我跑了:

$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.8.0_201/bin/java" 1

$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk1.8.0_201/bin/javac" 1

$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/java/jdk1.8.0_201/bin/javaws" 1

$ sudo update-alternatives --set java /usr/java/jdk1.8.0_201/bin/java

$ sudo update-alternatives --set javac /usr/java/jdk1.8.0_201/bin/javac

$ sudo update-alternatives --set javaws /usr/java/jdk1.8.0_201/bin/javaws
然后,我终于可以在中的备选方案中看到我的java

sudo update-alternatives --config java
我选择了新安装的java。然后我跑了

 sudo R CMD javareconf JAVA_HOME=/usr/java/jdk1.8.0_201/bin/

在其中,我再次明确地指定了我的javajdk路径。成功完成后,我能够在Rstudio中安装rJava,我需要安装glmulti。

在我的情况下,我必须运行rJava

R CMD javareconf
正如
su
,只是
sudo
不起作用。

我不确定这里是否已经确认了答案,但我想让大家看看安德鲁·科利尔(Andrew Collier)的这篇文章

他建议:

(1)更新所有存储库

sudo apt更新-y
(2)确保安装了JRE和JDK 8

sudo apt安装-y openjdk-8-jdk openjdk-8-jre
(3)然后,正如许多用户已经说过的,将R指向java,并带有指向JDK 8的显式路径

sudo R CMD javareconf JAVA_HOME=/usr/lib/jvm/JAVA-8-openjdk-amd64/
只要特定的Java包在/include目录中具有所有必要的编译内容,它就没有太大关系

user@laptop:~$ls/usr/lib/jvm/java-8-openjdk-amd64/include/
classfile_constants.hjdwptransport.hjvmticmlr.hlinux
jawt.hjni.hjvmti.h

关于这方面的更多信息,我建议您正确定位/编译此目录。

哇,在浏览了3个小时的R、Java、rJava和macOS问题之后,这节省了我的时间。。。我已经导出了我的JAVA_HOME,但是当我调用R CMD javareconf时,它仍然使用不同的路径。使用JAVA 8,以下命令对我有效:
sudo R CMD javareconf JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64
。(我曾经在Debian10Buster上安装Java8)。如果先检查是否安装了jdk,但没有正确引用,可能会有重复,请参见DamianoFantini的回答。如果不是你的方式很有价值,谢谢!
 sudo R CMD javareconf JAVA_HOME=/usr/java/jdk1.8.0_201/bin/
R CMD javareconf