2013-02-19 10 views
6

Ich baue ein Scala-Projekt mit sbt und ein Fettglas mit dem sbt-Assembly-Plugin erstellen. Ich bin in der Lage, nicht verwaltete Gläser (wie das Sigar-Glas) hinzuzufügen, indem ich Folgendes zu build.sbt hinzufüge.Inklusive Hyperic Sigar-Bibliothek in Jar während der Verwendung von sbt Assembly für Scala-Projekt

unmanagedJars in Compile += 
    file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar") 

Allerdings, wenn ich versuchen, diese läuft, bekomme ich folgende Fehlermeldung, da die *.so Bibliotheken sind nicht im Glas eingeschlossen.

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) 

Die Bibliotheken I enthalten sein sollen sind in lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so und sie müssen im Glas in ein Verzeichnis in dem Classpath verknüpft werden. Der einzige Weg, den ich kenne, eine Zuordnung zu tun ist wie folgt:

resourceDirectory in Compile <<= 
    baseDirectory{ _/"lib/hyperic-sigar-1.6.4/sigar-bin/lib" } 

Dies bewirkt, dass die *.so Bibliotheken des Glases zu Wurzel hinzugefügt werden, aber nicht ein bestimmtes Verzeichnis. Wie kann ich eine Ressourcenzuordnung angeben, um von lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so zu einem Verzeichnis im Klassenpfad in meinem Jar zu mappen? Was ist die Terminologie für das, was ich versuche?

+0

einen bestimmten Grund, warum Sie nicht "org.fusesource"% "sigar"% "1.6.4" Klassifikator ("native") verwenden? – OlegYch

+0

@OlegYch, habe ich zu 'libraryDependencies + =" org.fusesource "%" sigar "%" 1.6.4 "' in 'build.sbt' geändert, und ich bekomme immer noch den gleichen Fehler. –

Antwort

4

Unter der Annahme, dass sigar des Ladens nativen Bibliotheken aus Classpath tatsächlich in der Lage ist, sollte dies den Trick:

libraryDependencies += "org.fusesource" % "sigar" % "1.6.4" classifier("native") classifier("") 

Andernfalls müssen Sie sie aus dem Glas manuell entpacken und den richtigen java.library.path bieten

+0

Wird später in 'java.library.path' nachsehen. Vielen Dank! –

Verwandte Themen