Как разрешить не-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 добавляет только несколько типов в classpath (и 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,

Другие вопросы по тегам