#java #r #intellij-idea #jar #project
#java #r #intellij-idea #jar #проект
Вопрос:
Я пытаюсь заставить rJava работать в моей Java-программе, поскольку, похоже, это зависит от работы всего дерева каталогов R. Это дерево каталогов называется в системе $R_HOME и, настраивая переменные среды проекта, указывает на /usr/lib64/R
.
Это работает нормально, когда я запускаю свое приложение в своей IDE (IntelliJ IDEA), но всякий раз, когда я пытаюсь упаковать свой код в JAR и запустить его с помощью java -jar xxx.jar
, это выдает следующую ошибку:
R_HOME is not set. Please set all required environment variables before running this program.
Unable to start R
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f847c3a470c, pid=4232, tid=4233
#
# JRE version: OpenJDK Runtime Environment (10.0.2 13) (build 10.0.2 13)
# Java VM: OpenJDK 64-Bit Server VM (10.0.2 13, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libR.so 0x17270c]
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e" (or dumping to /home/xvlaze/IdeaProjects/Ypsilon/out/artifacts/Ypsilon/core.4232)
#
# An error report file with more information is saved as:
# /home/xvlaze/IdeaProjects/Ypsilon/out/artifacts/Ypsilon/hs_err_pid4232.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Aborted (core dumped)
Это сообщение было тем, которое я получал в IDE, когда переменная среды R_HOME не была установлена. Похоже, что либо файл JAR не может прочитать какие-либо переменные среды, либо мне нужно сообщить проекту, что он должен включать что-то, чего я не знаю.
Хотя я поддерживаю первый вариант, возможно, я чего-то не понимаю, поскольку я относительно новичок в Java.
Ответ №1:
Запустите ваше приложение с аргументом -D:
java -DR_HOME="/path/to/some-dir" -jar xxx.jar
Кавычки важны, если R_HOME содержит пробелы или минусы.
Комментарии:
1. Но что, если мне придется распространять этот JAR на другой компьютер? У меня была бы огромная проблема с переносимостью.
Ответ №2:
Самое простое решение — запустить его как: R_HOME=/usr/lib64/R java -jar xxx.jar
Это установило бы переменную среды с именем R_HOME
для выполнения вашего jar
Комментарии:
1. Но что, если мне придется распространять этот JAR на другой компьютер? У меня была бы огромная проблема с переносимостью.
2. Вы можете использовать shellscript или создать свой собственный JRE с помощью java packager и установить там свои переменные среды ( docs.oracle.com/javase/8/docs/technotes/guides/deploy /… )
3. Я не могу найти
javapackager
в своей системе. Я использую OpenJDK 10, и я думаю, что упаковщик является эксклюзивным для Oracle. Какой сценарий оболочки вы упоминаете?4. Это более серьезная проблема. Вам нужно подумать о совместимости с любой версией Java, которая может быть у пользователя, или распространять JRE вместе с вашим решением. Я бы посмотрел на launch4j или другие java-оболочки. launch4j.sourceforge.net
5. Я не знал об этом! Я принимаю ваш ответ, поскольку проблема обширна, и на исходный вопрос дан ответ. Спасибо!