在Java应用程序中使用外部包时,是否需要将它们完全包含在JAR中?

在Java应用程序中使用外部包时,是否需要将它们完全包含在JAR中?,java,r,intellij-idea,jar,rjava,Java,R,Intellij Idea,Jar,Rjava,我正在尝试在我的Java应用程序中使用,这需要在计算机中安装R 该应用程序在IDE(IntelliJ IDEA)中运行时运行良好,但当我将其打包到JAR文件中并使用java-JAR myfile.JAR运行时,会出现以下错误: R_HOME is not set. Please set all required environment variables before running this program. Unable to start R # # A fatal error has be

我正在尝试在我的Java应用程序中使用,这需要在计算机中安装R

该应用程序在IDE(IntelliJ IDEA)中运行时运行良好,但当我将其打包到JAR文件中并使用
java-JAR myfile.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)
当然,发生这种情况是因为我没有在IDEA工件中设置$R_HOME作为环境变量(我也不知道怎么做)$在我的项目环境变量中,R_HOME指向
/usr/lib64/R
,但JAR似乎看不到它


现在,我想到的问题是:我应该在我的JAR中包含
/usr/lib64/R
的内容以使其工作,还是有其他我不知道的方法?

您应该通过命令设置env变量

export R_HOME=/usr/lib64/R
此命令所使用的是基于会话的。因此,如果您希望在任何时候都拥有该env变量,则应在~/.bashrc文件中进行设置。您应该打开该文件进行编辑,并将命令设置为该文件的结尾

export R_HOME=/usr/lib64/R
有关环境变量的更多信息,请参见

而且,

命令的结果是什么?@AnarAmrastanov Nothing。但是,如果我运行
R RHOME
我会得到
/usr/lib64/R
。我认为您应该设置该env变量。请看我的回答很好!但是如果我需要在另一台机器上运行这个罐子呢?使用您的答案是一个机器范围的解决方案,但它在Windows机器中不起作用。您在将其打包到jar文件时编写了该错误。因此,我认为如果您将设置env变量,那么您可以成功地打包它。如果你想在任何机器上运行jar文件,那么你必须在jar文件中包含必需的RJava类,或者用jar文件传输必需的RJava库;JAR文件打包得很好,您的解决方案在机器级别解决了这个问题。我的JAR文件中已经有了所需的RJava类,它们可以正常工作。问题是R似乎没有在那个JAR中找到
R\u HOME
,我不知道如何设置它使其工作。你在运行JAR文件的过程中遇到过这个错误吗?是的,对不起,现在我意识到我没有澄清这个问题。现在编辑好了!