gpt4 book ai didi

scala - 在 Scala 项目中使用 sbt 程序集时在 jar 中包含 Hyperic Sigar 库

转载 作者:行者123 更新时间:2023-12-04 15:24:23 27 4
gpt4 key购买 nike

我正在用 sbt 构建一个 Scala 项目,并用 sbt-assembly 插件创建一个胖 jar。我可以通过将以下内容添加到 build.sbt 来添加非托管 jar(例如 Sigar jar) .

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/*.so 映射的资源映射到我 jar 中类路径中的目录?我正在尝试做什么的术语是什么?

最佳答案

假设 sigar 确实能够从类路径加载 native 库,这应该可以解决问题:

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

否则,您需要手动从 jar 中解压它们并提供正确的 java.library.path

关于scala - 在 Scala 项目中使用 sbt 程序集时在 jar 中包含 Hyperic Sigar 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com