Как разрешить зависимости библиотеки ja-jar (dll/jnilib) в sbt?

В файле проекта SBT build.sbt можно ли получить библиотечные зависимости, которые не связаны как jar?

В моем случае я пытаюсь использовать QTSampledSP, для которого требуются библиотеки .dll и .jnilib.

Ответ 1

Чтобы загрузить артефакт, вам нужно сделать Ivy (и, следовательно, sbt) явно осведомленным об артефакте DLL. Добавьте в проект build.sbt.

lazy val QtSampledJniLibArt = Artifact("qtsampledsp-osx", "jnilib", "jnilib")

libraryDependencies += "com.tagtraum" % "qtsampledsp-osx" % "0.9.6" artifacts(QtSampledJniLibArt)

resolvers += "beatunes" at "http://www.beatunes.com/repo/maven2"

Затем вам нужно сказать sbt, чтобы обратить внимание на эти артефакты (снова build.sbt):

classpathTypes ++= Set("jnilib", "dll")

По умолчанию sbt добавит только несколько типов в путь к классам (и jnilib и dll не входят в число них).

[sbt-0-13-1]> help classpathTypes
Artifact types that are included on the classpath.
[sbt-0-13-1]> show classpathTypes
[info] Set(eclipse-plugin, bundle, hk2-jar, orbit, jar)

Поскольку эти DLL/jnilibs необходимы для правильной работы класса, приведенный выше параметр classpathTypes, где вы добавляете дополнительные типы, будет исправлять все, что вы можете видеть ниже (не забудьте reload, когда в консоли sbt).

[sbt-0-13-1]> show classpathTypes
[info] Set(eclipse-plugin, bundle, hk2-jar, jnilib, orbit, jar, dll)

Если вам нужно более подробно изучить эти файлы, проверьте отчет об обновлении (из задачи update), где вы можете проверить все конфигурации/модули/артефакты. Запустите show update в консоли sbt и посмотрите файлы в target/resolution-cache/reports.