Включение библиотеки сигар Hyperic в jar при использовании сборки sbt для проекта Scala
Я создаю проект Scala с sbt и создаю жирную банку с плагином sbt-assembly. Я могу добавить неуправляемые банки (например, SIGAR jar), добавив следующее в build.sbt.
unmanagedJars in Compile +=
    file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar")
однако, когда я пытаюсь запустить это, я получаю следующую ошибку, потому что *.so библиотеки не включены в jar.
no libsigar-amd64-linux.so in java.library.path
org.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path
    at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172)
    at org.hyperic.sigar.Sigar.<clinit>(Sigar.java:100)
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.hyperic.sigar.ptql.SigarProcessQuery.create(Ljava/lang/String;)V
    at org.hyperic.sigar.ptql.SigarProcessQuery.create(Native Method)
    at org.hyperic.sigar.ptql.ProcessQueryFactory.getQuery(ProcessQueryFactory.java:66)
    at org.hyperic.sigar.ptql.ProcessFinder.findSingleProcess(ProcessFinder.java:44)
библиотеки, которые я хочу включить в lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so и они должны быть связаны с директорию в classpath в сосуд. Единственный способ, который я знаю, чтобы сделать отображение, как это:
resourceDirectory in Compile <<=
    baseDirectory{ _ / "lib/hyperic-sigar-1.6.4/sigar-bin/lib" }
в этом случае *.so библиотеки для добавления в root банка, но не конкретный каталог. Как я могу указать карту ресурсов для отображения из lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so в каталог в пути к классам в моей банке? Какова терминология того, что я пытаюсь сделать?
1 ответов
предполагая, что sigar действительно способен загружать собственные библиотеки из classpath, это должно сделать трюк:
libraryDependencies += "org.fusesource" % "sigar" % "1.6.4" classifier("native") classifier("")
в противном случае вам нужно распаковать их из банки вручную и предоставить надлежащую java.библиотека.путь