2015-04-19 19 views
4

我有一個模塊客戶端服務器項目,每個項目都有一個主模塊。如何在具有多個電源的單個模塊項目中設置sbt-native-packager

我試圖使用sbt-native-packager爲兩者生成啓動腳本。

項目/ P.scala

object Tactic extends Build { 

    lazy val root = 
    (project in file(".")). 
    configs(Client, Server) 
    .settings(inConfig(Client)(Defaults.configTasks) : _*) 
    .settings(inConfig(Server)(Defaults.configTasks) : _*) 

    lazy val Client = config("client") extend Compile 
    lazy val Server = config("server") extend Compile 

} 

build.sbt

mainClass in Client := Some("myProject.Client") 

mainClass in Server := Some("myProject.Server") 

enablePlugins(JavaAppPackaging) 

當我運行client:stage目錄target/universal/stage/lib與所有必要的罐子創建,但bin目錄丟失。我究竟做錯了什麼?

輔助問題:設置起始腳本名稱的關鍵是什麼?

回答

2

我建議將您的項目設置爲多模塊構建,而不是創建和使用新配置。我嘗試了你的多重配置路線,它變得非常快速。

例如(我創建了一個什麼項目sharedclient & server之間共享):

def commonSettings(module: String) = Seq[Setting[_]](
    organization := "org.tactic", 
      name := s"tactic-$module", 
     version := "1.0-SNAPSHOT", 
    scalaVersion := "2.11.6" 
) 

lazy val root = (project in file(".") 
    settings(commonSettings("root")) 
    dependsOn (shared, client, server) 
    aggregate (shared, client, server) 
) 

val shared = (project 
    settings(commonSettings("shared")) 
) 

val client = (project 
    settings(commonSettings("client")) 
    enablePlugins JavaAppPackaging 
    dependsOn shared 
) 

val server = (project 
    settings(commonSettings("server")) 
    enablePlugins JavaAppPackaging 
    dependsOn shared 
) 

注意我使sbt-native-packagerJavaAppPackagingclientserver。然後運行stage


此外,啓動腳本名稱的關鍵是executableScriptName

+0

太棒了! 我真的是一個初學者,所以我的解決方案很天真,可能是incongrus。 謝謝 – lorilan

相關問題