Как настроить .travis.yml для пакета, зависящего от rJava?

Я (и некоторые коллеги) работали над пакетом, зависящим от rJava. Программе, к которой мы подключаемся, для запуска требуется Java 11+, и мы сталкиваемся с некоторыми проблемами при попытке настроить файл .travis.yml.

Я пытался следовать решениям этот ответ (при адаптации их к 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, но потом понял, что у меня нет необходимых разрешений.

Я чувствую, что решение может быть довольно очевидным, но я застрял на этом уже довольно давно.


person dhersz    schedule 28.08.2020    source источник


Ответы (1)


Это связано с тем, что R находится в PATH пользователя, но sudo игнорирует его и просматривает только несколько системных местоположений. Это можно легко решить, разрешив полный путь на уровне пользователя:

  - sudo $(which R) CMD javareconf

Это вставит полный путь к R в команду sudo.

Обратите внимание, что скрипт javareconf кажется достаточно умным, чтобы обнаруживать Java в стандартных местах, поэтому нет необходимости экспортировать JAVA_HOME, PATH или LD_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
person Calimo    schedule 14.09.2020
comment
Обратите внимание, что это, кажется, устанавливает java-8-openjdk, а не 11. Но это решает оба сообщения об ошибках, с которыми вы столкнулись. - person Calimo; 14.09.2020
comment
Это сработало! Большое спасибо. На самом деле мне нужен только jre 11, не обязательно jdk 11, и я понял, что его устанавливает r-cran-rjava, так что все должно быть в порядке. - person dhersz; 16.09.2020