Como configurar um .travis.yml para um pacote que depende do rJava?

Aug 28 2020

Eu (e alguns colegas) estamos trabalhando em um pacote que depende do rJava. O programa ao qual nos conectamos precisa do Java 11+ para ser executado e estamos enfrentando alguns problemas ao tentar configurar o arquivo .travis.yml.

Tentei seguir as soluções dessa resposta (ao adaptá-las ao Java 11), mas nenhuma parece funcionar. Primeiro tentei:

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

apt_packages:
  - r-cran-rjava

Mas recebo a seguinte mensagem de erro:

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’

Então tentei seguir a segunda abordagem:

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

Ao que me deparo com esta mensagem de erro:

sudo: R: command not found

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

Tentei não usar o sudo, mas percebi que não tenho as permissões necessárias.

Eu sinto que a solução pode ser bastante óbvia, mas estou preso nisso há um bom tempo.

Respostas

1 Calimo Sep 14 2020 at 14:39

Isso ocorre porque Restá no PATH do usuário, mas o sudoignora e só procura em alguns locais do sistema. Isso pode ser resolvido facilmente resolvendo o caminho completo no nível do usuário:

  - sudo $(which R) CMD javareconf

Isso insere o caminho completo para R no comando sudo.

Note-se que o javareconfroteiro parece bastante inteligente para detectar Java nos locais padrão, por isso não é necessário para a exportação JAVA_HOME, PATHou LD_LIBRARY_PATHantes de chamá-lo.

Acabei com o seguinte .travis.ymlarquivo:

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

apt_packages:
  - r-cran-rjava

before_install:
  - sudo $(which R) CMD javareconf