簡體   English   中英

如何在沒有sbt的情況下運行sbt管理的應用程序項目?

[英]How to run a sbt-managed application project without sbt?

我的問題是關於運行由sbt 0.10.1管理的項目中的應用程序,因此依賴於它的自動依賴管理(下載並設置適當的類路徑來運行)。

使用自動依賴關系管理時, 似乎運行應用程序的唯一方法是使用sbt本身,因為它知道如何設置類路徑(在Ivy2的幫助下)。

如何在沒有sbt的情況下運行應用程序?

您還可以使用Typesafe的xsbt-start-script-plugin (編輯:now sbt-start-script )生成具有正確類路徑的shell腳本:

此插件允許您為項目生成腳本target/start 該腳本將“就地”運行項目(無需首先構建包)。

target/start腳本類似於sbt run但它不依賴於SBT。 sbt run不建議用於生產用途,因為它將SBT本身保留在內存中。 target/start旨在運行生產中的應用程序。

該插件添加了一個生成target/start的任務start-script 它還添加了一個stage任務,別名為start-script任務。

這是Heroku用於運行Scala應用程序的內容。

我用返璞詞SBT-onejar插件具有所有依賴性包括(很像創建可執行罐子Assembly插件 Maven的)。 它非常簡單,文檔齊全。

如果要創建包含所有應用程序和依賴項的“胖”jar,可以使用sbt-assembly插件 然后,您可以將應用程序作為標准jar而無需sbt。

您還可以創建任務以創建啟動應用程序的文件。 @Kipton Barros在如何從shell運行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)
  }

這會在目標目錄中創建一個名為scala-sbt的文件,該文件已正確設置類路徑以運行應用程序。 調整味道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM