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