2017-03-02 48 views
0

我想定義的SBT的任務,將開始在classpath項目的編譯類和執行一些初始命令斯卡拉控制檯啓動斯卡拉REPL。SBT的任務是用項目的類路徑上的類和一些初步的命令

我想這是我的,我放在一起基於其他答案不好意思嘗試啓動這樣

sbt session 

是REPL會話中,但既不穿類路徑中的項目的類別,也沒有按」牛逼執行初始化命令:

// extend Test in hope to include compiled sources on the classpath. 
val ReplSession = config("repl-session") extend(Test) 

val root = project.in(file(".")) 
    .configs(ReplSession) 
    .settings(inConfig(ReplSession)(initialCommands := """ 
    | import foo._ 
    | """.stripMargin)) 

// define task that starts the REPL session 
lazy val session = TaskKey[Unit]("session") 
session <<= Seq(
    console in (root, ReplSession) 
).dependOn 
+0

不控制檯動作已經做你想做什麼?與'console中的initialCommands'一起嗎?但是你似乎已經在使用它,但是試圖做一些額外的事情,所以我覺得你的問題還有更多我不明白的地方。 (在這裏更多的細節:http://www.scala-sbt.org/0.13/docs/Howto-Scala.html) –

+0

@ImranRashid'SBT console'啓動控制檯,但沒有在classpath項目中的類,從而執行'initialCommands'失敗。什麼工作是'SBT試驗:用'在console' initialCommands一起console',但仍然設置'initialCommands'爲'Compile'配置爲好,在那裏他們仍然會失敗。另外我想要一個單詞命令而不是'test:console'。 –

+0

我明白了 - 'console'確實得到追加到classpath * *內的控制檯項目中的類,而不是當你調用'initialCommands'。所以你不能在'initialCommands'中引用你項目中的類。 –

回答

0

注:如果有人有更好的解決方案,我將其標記爲正確答案。

什麼,我有些工作發生了變化

inConfig(ReplSession)(initialCommands := ...) 

在我原來的代碼段

inConfig(Test)(initialCommands := ...) 

,或者

initialCommands in (Test, console) := ... 

爲了完整起見,這裏就是我現在使用:

val ReplSession = config("repl-session") extend(Test) 

val root = project.in(file(".")) 
    .configs(ReplSession) 

lazy val session = TaskKey[Unit]("session") 
session <<= Seq(
    console in (root, ReplSession) 
).dependOn 

initialCommands in (Test, console) := """ 
    | import foo._ 
    | """.stripMargin 

我不覺得這是最佳的,因爲我在配置Test(這我ReplSession延伸)設置initialCommands,而不是隻在配置ReplSession設置initialCommands