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

问题描述

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

我尝试遵循this answer的解决方案(同时使它们适应Java 11),但似乎没有一个可行。首先,我尝试过:

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’

然后我尝试了第二种方法:

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

此错误消息引起的后果:

sudo: R: command not found

The command "sudo R CMD javareconf" failed and exited with 1 during .

我尝试不使用sudo,但随后我发现我没有所需的权限。

我觉得解决方案可能很明显,但是我已经坚持了很长时间。

解决方法

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

  - sudo $(which R) CMD javareconf

这会将R的完整路径插入到sudo命令中。

请注意,javareconf脚本看起来足够聪明,可以在标准位置检测Java,因此在调用之前无需导出JAVA_HOMEPATHLD_LIBRARY_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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...