Как разрешить не-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
,