6

私は sbt で Scala プロジェクトを構築し、sbt-assembly プラグインでファット jar を作成しています。に以下を追加することで、管理されていない jar (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あり、jar 内のクラスパスのディレクトリにリンクする必要があります。このようなマッピングを行うために私が知っている唯一の方法は次のとおりです。

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

これにより、*.soライブラリがjar のルートに追加されますが、特定のディレクトリには追加されません。lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.sojar のクラスパスのディレクトリからマップするリソース マップを指定するにはどうすればよいですか? 私がやろうとしていることの用語は何ですか?

4

1 に答える 1

4

sigar が実際にクラスパスからネイティブ ライブラリをロードできると仮定すると、これでうまくいくはずです。

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

それ以外の場合は、jar から手動で解凍し、適切な java.library.path を指定する必要があります。

于 2013-03-22T02:34:28.920 に答える