scala - sbt:如何将本地文件系统 jar 添加到我的项目中……还有很多 .so 库?

标签 scala jar centos sbt .so

在这个 question ,讨论了如何将 jar 文件包含到 sbt 项目中。我需要一个 .jar 文件和一些 .so 库文件。

尝试1:

我可以将 jar 文件移动到我的 sbt lib/目录中,这很好,除了这个应用程序有一个小 jar,它只是 C++ 软件的包装器。我想做的事情是在 .so 库文件中,如果我将 jar 文件本身移动到 ./lib ,我会得到链接错误:

sbt:SimpleProject> run linearSalience
[info] Running linearSalience linearSalience
[error] (run-main-0) java.lang.UnsatisfiedLinkError: no java_salience in java.library.path
[error] java.lang.UnsatisfiedLinkError: no java_salience in java.library.path
[error]         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)

尝试2:

我尝试将所需库的 simlinks 放入 lib/文件夹中,但这没有用。我不想将整个库复制到 lib/文件夹中,即使这样可行,因为它几乎是 2 GB;为每个项目复制它是愚蠢的。

尝试 3:

我尝试通过 sbt 的 javaOptions 设置 java.library.path,方法是将以下行添加到 build.sbt
javaOptions in run += "-Djava.library.path=/opt/path/to/lib/:/opt/path/to/sdk/java/src/"

第一个路径包含 .so 文件,第二个路径包含 .jar 文件。在这种情况下,编译器甚至找不到包(当 .jar 文件位于 sbt 的 lib/文件夹中时,这不是问题):
[info] Compiling 1 Scala source to /opt/optests/sbttest/target/scala-2.10/classes ...
[error] /opt/optests/sbttest/src/main/scala/SimpleApp.scala:6:12: object lexalytics is not a member of package com
[error] import com.lexalytics.salience.{Salience, Section, Sentence, Word}
[error]            ^
[error] /opt/optests/sbttest/src/main/scala/SimpleApp.scala:23:23: not found: type Salience
[error]     val session = new Salience("/opt/path/to/license.v5", "/opt/path/to/data")
[error]                       ^
...etc

尝试4:

我尝试设置 LD_LIBRARY_PATH 环境变量(如建议 here )

[用户@服务器 ~]$ echo $LD_LIBRARY_PATH
/opt/path/to/lib/:/opt/path/to/sdk/java/src/

结果与3中的错误相同

似乎有关此主题的所有问题都可以通过将单个 jar 文件放入 lib/或使用托管依赖项(如 here )来解决。但是我有一个没有在线支持的仅限本地存储库,它不仅仅是一个 .jar 文件。

最终,我需要将库目录放入 java.library.path,但我该怎么做呢?

注意:这不是任何仅处理 .jar 文件且未提及 .so 文件的问题的重复。

最佳答案

当您在 JVM 上的 native 库上使用 JNI 包装器时(语言无关,可以是 Java 或 Scala),库 jar 文件通常只包含 JNI 胶水代码,定义如何映射一些 java api 调用到 native 库调用。这个jar只是一个普通的库,所以可以放到/lib sbt 文件夹像往常一样。

native 库本身应该在运行时出现在 java.library.path 中。 ,所以你很接近。正如您所建议的,您可以将 native SDK 添加到 javaOptions in run (连同 /lib 文件夹中的 jar),它应该可以工作。

关于scala - sbt:如何将本地文件系统 jar 添加到我的项目中……还有很多 .so 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51974677/

相关文章:

scala - 为什么我们需要分离 Apply 和 Applicative 类型类?

scala - 在 scala 中创建元组时类型绑定(bind)错误

java - 如何在 mac 中运行 .jar?

Eclipse:在“库”选项卡中,所有按钮均被禁用

centos - SRAT :Hotplug area too small

java - 斯卡拉 : function to measure the runtime of any other function

java - 编译基本的java项目

python - centOs 7在搜索依赖项时找不到python3-PyYAML和python3-gobject

mysql - 数据库连接失败。无法连接到 '192.168.1.9' (13) 上的 MySQL 服务器

scala - Scala 中依赖类型的隐式解析