В этом вопросе обсуждается, как включить файл 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:
Я пробовал помещать симлинки на нужные библиотеки в папку lib/, но это не сработало. Я не хочу копировать всю библиотеку в папку lib/, даже если это сработает, так как это почти 2 ГБ; и было бы глупо копировать его для каждого проекта.
Попытка 3:
Я попытался установить java.library.path через javaOptions sbt, добавив следующую строку в build.sbt
javaOptions in run += "-Djava.library.path=/opt/path/to/lib/:/opt/path/to/sdk/java/src/"
Первый путь содержит файлы .so, второй — файл .jar. В этом случае компилятор даже не смог найти пакеты (что не было проблемой, пока файл .jar находился в папке lib/ sbt):
[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 (как было предложено здесь)
[user@server ~]$ echo $LD_LIBRARY_PATH /opt/path/to/lib/:/opt/path/to/sdk/java/src/
В результате та же ошибка, что и в 3
Похоже, что все вопросы по этой теме решаются либо помещением отдельных jar-файлов в lib/, либо использованием управляемых зависимостей (как здесь). Но у меня есть локальный репозиторий без онлайн-поддержки, это больше, чем один файл .jar.
В конечном итоге мне нужно получить каталог библиотеки в java.library.path, но как мне это сделать?
Примечание. Это не дубликат какого-либо вопроса, касающегося только файлов .jar и не упоминающего файлы .so.