Scala 如何在没有sbt的情况下运行sbt管理的应用程序项目?

Scala 如何在没有sbt的情况下运行sbt管理的应用程序项目?,scala,sbt,Scala,Sbt,我的问题是运行一个应用程序,它位于sbt0.10.1管理的项目中,因此依赖于它的自动依赖关系管理(下载并设置适当的类路径以运行) 当使用自动依赖关系管理时,显示出运行应用程序的唯一方法是使用sbt本身,因为它知道如何设置类路径(在Ivy2的帮助下) 没有sbt我如何运行应用程序?我使用的是创建包含所有依赖项的可执行JAR(与Maven非常相似)。它非常简单,并且有很好的文档记录。如果您想创建一个包含所有应用程序和依赖项的“胖”jar,您可以使用。然后,您可以在没有sbt的情况下以标准的jar运行

我的问题是运行一个应用程序,它位于sbt
0.10.1
管理的项目中,因此依赖于它的自动依赖关系管理(下载并设置适当的类路径以运行)

当使用自动依赖关系管理时,显示出运行应用程序的唯一方法是使用sbt本身,因为它知道如何设置类路径(在Ivy2的帮助下)


没有sbt我如何运行应用程序?

我使用的是创建包含所有依赖项的可执行JAR(与Maven非常相似)。它非常简单,并且有很好的文档记录。

如果您想创建一个包含所有应用程序和依赖项的“胖”jar,您可以使用。然后,您可以在没有sbt的情况下以标准的
jar
运行应用程序。

您还可以创建一个任务来创建一个文件来启动应用程序@Kipton Barros在以下网站上发布了此消息:

val MkUnixlauncher=config(“MkUnixlauncher”)扩展(编译)
val mkunixlauncher=任务键[单位](“mkunixlauncher”)

val mkunixlauncherTask=mkunixlauncher您还可以使用Typesafe的xsbt启动脚本插件(编辑:现在)生成具有正确类路径的shell脚本:

此插件允许您为一个应用程序生成脚本
target/start
项目脚本将“就地”运行项目(无需 首先构建一个包)

target/start
脚本类似于
sbt run
,但它不依赖于 在SBT上<代码>sbt运行
不建议用于生产,因为它 将SBT本身保存在内存中<代码>目标/开始用于运行 应用程序正在制作中

该插件添加了一个任务
start脚本
,该脚本生成
target/start
。 它还添加了一个
阶段
任务,别名为
开始脚本
任务


这就是运行Scala应用程序的方法。

+1 retronym插件看起来比我建议的要好,因为它不会解压依赖项。这与我希望实现的目标最接近。你好,Ben,也许你有什么提示?非常欢迎使用
sbt启动脚本的完整示例。
  val MkUnixlauncher = config("mkunixlauncher") extend(Compile)
  val mkunixlauncher = TaskKey[Unit]("mkunixlauncher")
  val mkunixlauncherTask = mkunixlauncher <<= (target, fullClasspath in Runtime) map { (target, cp) =>
    def writeFile(file: File, str: String) {
      val writer = new PrintWriter(file)
      writer.println(str)
      writer.close()
    }
    val cpString = cp.map(_.data).mkString(System.getProperty("path.separator"))
    val launchString = """
CLASSPATH="%s"
scala -usejavacp -Djava.class.path="${CLASSPATH}" "$@"
""".format(cpString)
    val targetFile = (target / "scala-sbt").asFile
    writeFile(targetFile, launchString)
    targetFile.setExecutable(true)
  }