2016-04-01 137 views
4

我有我的目錄結構設置。用sbt運行多個應用程序

src/main/scala/main/Main.scala 
src/main/scala/scripts/MainScript.scala 

腳本是一個將要運行的後臺作業。

我之前用sbt-assembly將主文件打包成一個jar來部署,但我不知道如何創建兩個單獨的罐子,分別是sbt-assemblysbt-native-packager。我將如何去做這件事,以及對於這個問題最好的辦法是什麼?

我會尋找類似的東西。

java -jar main.jar $PORT 
java -jar scriptMain.jar 
+0

SBT本地打包爲您創建部署工件。您可以一起使用Sbt程序集和Sbt本地程序包。我們爲使用Sbt程序集創建的fat jar創建的spark包創建rpm包。 – Manas

+0

@Manas是否可以使用'build.sbt'內的'sbt-assembly'來編寫解決方案,以同時創建兩個單獨的JAR?我之前使用它來創建單個JAR。因爲一旦我有了這些,我可以創建另一個文件來完成上述代碼塊中發生的事情。 – Petesta

+0

@Manas我應該創建一個多項目構建?所以我會在'common'中使用通用代碼,在'script'中使用MainScript,在main中使用Main。那樣構建JAR? – Petesta

回答

1

只有使用native-packager才能解決這個問題的方法如下。

  • 把你的所有主要類別中src/main/scala
  • 定義mainClass in Compile := Some("foo.bar.Main")應作爲默認
  • add additional scriptssrc/universal/bin你想提供運行。這些腳本可以將native-packager and set the-main參數生成的主腳本調用到要調用的類。

現在你有一個具有以下結構的輸出包(例如zip,rpm,deb)。假設你的應用程序被稱爲對myApp,你到其它所謂斌腳本提供otherApp1/otherApp2

lib/ (jars live here) 
conf/ (configuration files here, if any) 
bin/ 
    myApp 
    otherApp1 
    otherApp2 

不幸的是我沒有例子的腳本(我的bash-foo是不是瞬間不夠好在SO上的魔法)。最後,腳本(otherApp1,otherApp2)應該將它們收到的參數傳遞給native-packager腳本(myApp)。

an issue #633提供了一個自動的方式來生成這樣的腳本。

希望幫助, 繆奇

相關問題