【问题标题】:When using external packages in a Java application, do I need to include them entirely in the JAR?在 Java 应用程序中使用外部包时,是否需要将它们完全包含在 JAR 中?
【发布时间】:2019-03-31 09:59:08
【问题描述】:

我正在尝试在我的 Java 应用程序中使用 Rjava,这需要在计算机中安装 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 Artifact 中将 $R_HOME 设置为环境变量(我也不知道该怎么做)。 $R_HOME 在我的项目环境变量中指向/usr/lib64/R,但JAR 似乎看不到它。

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

【问题讨论】:

  • 命令echo $R_HOME的结果是什么?
  • @AnarAmrastanov 什么都没有。但是,如果我运行R RHOME,我会得到/usr/lib64/R
  • 我认为你应该设置那个环境变量。请看我的回答

标签: java r intellij-idea jar rjava


【解决方案1】:

你应该通过命令设置环境变量

export R_HOME=/usr/lib64/R

这个命令是基于会话的。因此,如果您想随时使用该环境变量,则应在 ~/.bashrc 文件中进行设置。您应该打开该文件进行编辑并将命令设置为该文件的末尾

export R_HOME=/usr/lib64/R

有关环境变量的更多信息,请参阅 https://codeburst.io/linux-environment-variables-53cea0245dc9

另外, https://askubuntu.com/questions/58814/how-do-i-add-environment-variables

【讨论】:

  • 非常好!但是如果我需要在另一台机器上运行 JAR 怎么办?使用您的答案是一种机器范围的解决方案,但它不适用于例如 Windows 机器。
  • 您写道,错误是在将其打包到 jar 文件中的过程中。所以我认为如果你设置环境变量,那么你可以成功打包它。如果您想在任何机器上运行 jar 文件,那么您必须将所需的 RJava 类包含到 jar 文件中,或者使用您的 jar 文件传输所需的 RJava 库。
  • 哎呀,那我没有正确表达自己; JAR 文件打包好,您的解决方案在机器级别解决了问题。我的 JAR 文件中已经有了所需的 RJava 类,它们可以正常工作。问题是 R 似乎在该 JAR 中找不到R_HOME,我不知道如何设置它才能工作。
  • 你在运行 jar 文件的过程中遇到这个错误吗?
  • 是的,对不起,现在我意识到我没有澄清这个问题。现在已编辑!
猜你喜欢
  • 2023-03-11
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2018-01-05
  • 2014-03-21
相关资源
最近更新 更多