如何在 sbt-native-packager Akka 构建中包含 sigar 本机库?

Posted

技术标签:

【中文标题】如何在 sbt-native-packager Akka 构建中包含 sigar 本机库?【英文标题】:How to include sigar native libraries in sbt-native-packager Akka build? 【发布时间】:2015-03-30 09:39:55 【问题描述】:

我只是好奇是否有一些使用 Akka 打包的好方法。

我找到了一些示例 here,但它是为 rpm 构建创建的,我在我的 build.sbt 中使用这两个插件:

.enablePlugins(AkkaAppPackaging)
  .enablePlugins(UniversalPlugin)

实际上,我通过手动将 sigar 库复制到生成应用程序启动脚本的目录中找到了一种解决方法。

还需要将-Djava.library.path=./sigar 设置为sigar 库所在的适当目录,这可以在build.sbt 中设置,或者稍后通过更改JAVA_OPTS 在生成的脚本中手动更改。

【问题讨论】:

rpm 解决方案也应该对您的情况有效。你能描述你的问题吗?如果您像在 rpm 示例中一样添加库,是否不会显示这些库? 是的,他们没有出现。 但我会再次检查。感谢您的评论。 【参考方案1】:

这就是我所做的

  lazy val sigarJavaOpts = "-Djava.library.path=./sigar"

  libraryDependencies ++= Dependencies.sigar

  mappings in Universal ++= MappingsHelper directory getClass.getClassLoader.getResource("sigar").getFile

  bashScriptExtraDefines += s"""addJava "$sigarJavaOpts" """

  javaOptions in run += sigarJavaOpts

请注意,我将 sigar 文件放在了资源文件夹中。您可能还需要从以下导入

import com.typesafe.sbt.SbtNativePackager.Universal
import com.typesafe.sbt.packager.MappingsHelper
import com.typesafe.sbt.packager.Keys.bashScriptExtraDefines 

我也有一个 Dependencies 对象,其中有

  val sigar = Seq(
    "org.fusesource" % "sigar" % "1.6.4"
  )

【讨论】:

以上是关于如何在 sbt-native-packager Akka 构建中包含 sigar 本机库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sbt-native-packager 在 Docker 中使二进制文件可执行?

如何使用 sbt-native-packager 创建基本项目设置

如何在运行时为使用 sbt-native-packager 捆绑的应用程序加载配置文件

如何在 sbt-native-packager rpm 构建中包含 libsigar?

如何从 sbt-native-packager 发布到 Google Container Engine?

如何使用 sbt-native-packager 设置 Docker Registry