【问题标题】:Why does sbt-native-packager generate no bin directory?为什么 sbt-native-packager 不生成 bin 目录?
【发布时间】:2014-07-03 02:48:39
【问题描述】:

今天我将sbt-native-packager 集成到我的scala 项目中,主要是为了生成方便的执行脚本和/或包。

现在,我添加到我的build.sbt 行:

packageArchetype.java_application

还有我的plugins.sbt

resolvers += "sbt-plugins" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.0-RC2")

当我调用sbt stage 时,我得到target/universal/stage 目录,但那里只有lib,没有带有脚本的bin(根据http://www.scala-sbt.org/sbt-native-packager/GettingStartedApplications/MyFirstProject.html 应该创建)。

我是否需要添加其他内容来获取带有脚本的bin 目录?

【问题讨论】:

标签: scala sbt sbt-native-packager


【解决方案1】:

问题是在我的项目中我有多个主要类。在build.sbt 我有:

Keys.mainClass in (Compile, run) := Some("Rest")

应该是

Keys.mainClass in (Compile) := Some("Rest")

现在它可以完美运行了。

【讨论】:

  • 这很好,谢谢。我将具有主类的jdom library 添加到我的项目中,并得到了这个神秘的破坏。来自sbt-native-packager 的警告将是一个不错的选择。
  • 我必须为mainClass 键添加Compile 范围才能在packageArchetype.java_server 项目中生成bin 脚本
  • 我也有这个问题;定义 mainClass in (Compile, run) := Some("foo") 而不是 mainClass in (Compile) := Some("foo")。这是标准预期的 SBT 行为,还是看起来像 sbt-native-packager 中的错误?
  • 这是一个有趣的问题,我解决了这个问题后没有进一步调查 - 你在使用最新版本的 sbt-native-packager 时遇到过同样的问题吗?
  • 也适用于 docker 打包
【解决方案2】:

附带说明,更改 mainClass 的配置会影响应用程序的 in-sbt 运行。为了将您的构建配置为在 sbt 中运行应用程序(例如在开发期间)以及创建包,您将需要 2 个 mainClass 定义(在 build.sbt 中):

mainClass in Compile := Some("MyBootKernel")

mainClass in (Compile, run) := Some("MyApp")

其中 2 个主要类是:

class MyBootKernel extends Bootable {
  def startup = { MyApp.main(Array()) }
  def shutdown = {}
}

object MyApp extends App {
    // initialize application.
}

bin目录中的启动脚本将app主类传递给akka微内核,它必须扩展Bootable(然后初始化应用程序),而直接从sbt运行不需要启动东西(即直接应用程序)。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 2013-12-06
    • 2016-12-27
    • 2017-03-21
    • 2016-10-24
    • 2014-01-27
    • 2016-09-15
    • 2016-05-19
    • 2015-07-25
    相关资源
    最近更新 更多