[英]How to merge an SBT-managed scala project with a Maven-managed Java project?
[英]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.