如何为依赖rJava的包配置.travis.yml?

如何为依赖rJava的包配置.travis.yml?,r,travis-ci,rjava,R,Travis Ci,Rjava,我(和一些同事)一直在开发一个依赖rJava的软件包。我们连接的程序需要Java 11+才能运行,我们在尝试配置.travis.yml文件时遇到了一些问题 我曾尝试遵循的解决方案(同时将其应用于Java11),但似乎没有一个可行。首先,我尝试: language: r warnings_are_errors: true sudo: required cache: packages apt_packages: - r-cran-rjava 但我收到以下错误消息: Failed with e

我(和一些同事)一直在开发一个依赖rJava的软件包。我们连接的程序需要Java 11+才能运行,我们在尝试配置.travis.yml文件时遇到了一些问题

我曾尝试遵循的解决方案(同时将其应用于Java11),但似乎没有一个可行。首先,我尝试:

language: r
warnings_are_errors: true
sudo: required
cache: packages

apt_packages:
  - r-cran-rjava
但我收到以下错误消息:

Failed with error:  ‘.onLoad failed in loadNamespace() for 'rJava', details:

  call: dyn.load(file, DLLpath = DLLpath, ...)

  error: unable to load shared object '/home/travis/R/Library/rJava/libs/rJava.so':

  libjvm.so: cannot open shared object file: No such file or directory’
sudo: R: command not found

The command "sudo R CMD javareconf" failed and exited with 1 during .
然后我尝试了第二种方法:

language: r
warnings_are_errors: true
sudo: required
cache: packages

apt_packages:
  - default-jdk

before_install:
  - export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
  - export PATH=$PATH:$JAVA_HOME/bin
  - export LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib
  - sudo R CMD javareconf
对于我遇到的错误消息:

Failed with error:  ‘.onLoad failed in loadNamespace() for 'rJava', details:

  call: dyn.load(file, DLLpath = DLLpath, ...)

  error: unable to load shared object '/home/travis/R/Library/rJava/libs/rJava.so':

  libjvm.so: cannot open shared object file: No such file or directory’
sudo: R: command not found

The command "sudo R CMD javareconf" failed and exited with 1 during .
我曾尝试不使用
sudo
,但后来发现我没有所需的权限


我觉得解决方案可能相当明显,但我已经在这方面停留了很长一段时间。

这是因为
R
在用户的路径中,但是
sudo
忽略了它,并且只查看了几个系统位置。这可以通过在用户级别解析完整路径轻松解决:

  - sudo $(which R) CMD javareconf
这将在sudo命令中插入R的完整路径

请注意,
javareconf
脚本似乎足够智能,可以在标准位置检测Java,因此在调用它之前不必导出
Java\u HOME
PATH
LD\u LIBRARY\u PATH

我最终得到了以下
.travis.yml
文件:

language: r
cache: packages
warnings_are_errors: true
sudo: required

apt_packages:
  - r-cran-rjava

before_install:
  - sudo $(which R) CMD javareconf

注意,这似乎是安装java-8-openjdk,而不是11。但它解决了您遇到的两个错误消息。这很有效!非常感谢你。实际上,我只需要jre 11,不一定需要jdk 11,我意识到r-cran-rjava安装了它,所以应该没问题。