Sto costruendo un progetto Scala con sbt e creando un jar con il plugin sbt-assembly. Sono in grado di aggiungere vasi non gestiti (come il barattolo di sigari) aggiungendo quanto segue a build.sbt
.Includere la libreria di Hyperic Sigar all'interno di jar mentre si utilizza l'assembly sbt per il progetto Scala
unmanagedJars in Compile +=
file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar")
Tuttavia, quando provo l'esecuzione di questo, ottengo il seguente errore perché le *.so
librerie non sono inclusi nel vaso.
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)
Le librerie voglio includere sono in lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so
e hanno bisogno di essere collegato a una directory nel classpath all'interno del vaso. L'unico modo che conosco per fare una mappatura di questo tipo è:
resourceDirectory in Compile <<=
baseDirectory{ _/"lib/hyperic-sigar-1.6.4/sigar-bin/lib" }
In questo modo il *.so
librerie da aggiungere al radice del vaso, ma non una directory specifica. Come posso specificare una mappa delle risorse da mappare da lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so
a una directory nel classpath nel mio jar? Qual è la terminologia per ciò che sto cercando di fare?
qualsiasi motivo particolare per cui non si utilizza "org.fusesource"% "sigar"% "1.6.4" classificatore ("nativo")? – OlegYch
@OlegYch, ho cambiato usando 'libraryDependencies + =" org.fusesource "%" sigar "%" 1.6.4 "' in 'build.sbt', e sto ancora ricevendo lo stesso errore. –