【发布时间】:2018-08-22 20:31:42
【问题描述】:
在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:
我已尝试将所需库的 simlink 放入 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)
[user@server ~]$ echo $LD_LIBRARY_PATH /opt/path/to/lib/:/opt/path/to/sdk/java/src/
结果与3中的错误相同
似乎关于这个主题的所有问题都可以通过将单个 jar 文件放入 lib/ 或使用托管依赖项(如 here)来解决。但是我有一个没有在线支持的仅限本地存储库,它不仅仅是一个 .jar 文件。
最终,我需要将库目录放入 java.library.path,但我该怎么做呢?
注意:这不是任何仅处理 .jar 文件且未提及 .so 文件的问题的重复。
【问题讨论】: