为什么sbt-native-packager没有生成bin目录?

时间:2014-05-14 20:56:52

标签: scala sbt sbt-native-packager

今天我将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目录?

2 个答案:

答案 0 :(得分:17)

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

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

应该是

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

现在它完美无缺。

答案 1 :(得分:1)

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

mainClass in Compile := Some("MyBootKernel")

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

两个主要类别是:

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

object MyApp extends App {
    // initialize application.
}

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