今天我将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
目录?
答案 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直接)。