【问题标题】:How to run a sbt-managed application project without sbt?如何在没有 sbt 的情况下运行 sbt 管理的应用程序项目?
【发布时间】:2011-11-03 22:28:31
【问题描述】:

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

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

如何在没有 sbt 的情况下运行应用程序?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您还可以使用 Typesafe 的 xsbt-start-script-plugin(编辑:现在 sbt-start-script)生成具有正确类路径的 shell 脚本:

    这个插件允许你生成一个脚本target/start 项目。该脚本将“就地”运行项目(无需 先构建一个包)。

    target/start 脚本类似于sbt run,但它不依赖 在 SBT 上。 sbt run 不推荐用于生产环境,因为它 将 SBT 本身保存在内存中。 target/start 旨在运行 生产中的应用程序。

    插件添加了一个任务start-script,它生成target/start。 它还添加了一个stage 任务,别名为start-script 任务。

    这就是 Heroku uses 运行 Scala 应用程序的原因。

    【讨论】:

    • 你好,Ben,也许你对this question有提示? sbt-start-script 的完整示例真的很受欢迎。
    【解决方案2】:

    我使用retronymsbt-onejar plugin 创建了包含所有依赖项的可执行jar(很像Maven 的Assembly plugin)。它非常简单且有据可查。

    【讨论】:

    • +1 retronym 插件看起来比我建议的要好,因为它不会解压依赖项
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您还可以创建任务来创建文件以启动应用程序。 @Kipton Barros 在How do I run an sbt main class from the shell as normal command-line program? 中发布了这个:

        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)
        }
      

      这会在您的目标目录中创建一个名为 scala-sbt 的文件,该文件的类路径设置正确以运行应用程序。调整口味。

      【讨论】:

      • 这最接近我想要实现的目标。
      猜你喜欢
      • 2014-07-04
      • 2014-06-29
      • 2014-10-09
      • 2018-05-30
      • 2017-09-02
      • 2021-06-30
      • 2022-07-01
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多