2017-03-02 7 views
0

クラスパス上でプロジェクトのコンパイルされたクラスといくつかの初期コマンドが実行されてスカラコンソールを開始するsbtタスクを定義します。sbtクラスパス上のプロジェクトのクラスといくつかの初期コマンドを使ってScala REPLを開始するタスク

は、私がここで私は他の回答に基づいてまとめて私に残念試みであるこの

sbt session 

のようなものREPLセッションを開始したいが、それどちらもクラスパス上のプロジェクトのクラスを置き、また doesnの」トン初期のコマンドを実行します。

// 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

コンソール操作では、まだ何もしていませんか? 'initialCommands in console'と一緒にですか?しかし、あなたはすでにそれを使用しているようですが、余分なことをしようとしているので、あなたの質問には私が理解していないほどのものがあるように感じます。 (詳細はこちら:http://www.scala-sbt.org/0.13/docs/Howto-Scala.html) –

+0

@ImranRashid 'sbt console'はコンソールを起動しますが、クラスパス上にプロジェクトクラスがないので、 'initialCommands'は失敗します。動作するものは 'sbt test:console'と' consoleのinitialCommands'ですが、まだ 'Compile'設定の' initialCommands'を設定します。また、 'test:console'の代わりに1単語のコマンドが必要です。 –

+0

ああ、 'console'はコンソールクラスパスにプロジェクトクラスを追加しますが、' initialCommands'を呼び出すときには取得しません。したがって、あなたのプロジェクトのクラスを 'initialCommands'で参照することはできません。 –

答えて

0

注:誰かがよりよい解決策を持っている場合することは、私は正しい答えとしてそれをマークします。

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

または、完全のために代わり、

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

に私の元のスニペットで

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

を変えた何多少私のために働いた

は、ここで私が今使用しているものです。

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 

私が代わりにのみ設定ReplSessioninitialCommandsを設定する、(私のReplSessionが延びる)設定TestinitialCommandsを設定していますので、私は、これが最適な見つけることはありません。

関連する問題