sbt как передать параметры командной строки при более чем одном исполняемом файле

#command-line #sbt

#командная строка #sbt

Вопрос:

В моем проекте есть несколько исполняемых файлов. Как мы можем запустить один из них с предоставленными аргументами командной строки? После попытки включить аргументы из sbt run они игнорируются, и вместо этого отображается меню доступных основных файлов:

 C:appssimpleakka>sbt run "com.mycompany.sparkpoc.hbase.HBasePop spark://localhost:7088 localhost:2181 1000 100"
[info] Loading project definition from C:appssimpleakkaproject
[info] Set current project to simpleakka (in build file:/C:/apps/simpleakka/)

Multiple main classes detected, select one to run:

 [1] com.mycompany.sparkpoc.LCS
 [2] com.mycompany.sparkpoc.rdd.HBaseMR
 [3] org.apache.spark.examples.HwHBaseTest
 [4] com.mycompany.sparkpoc.rdd.HBaseMROld
 [5] com.mycompany.sparkpoc.HBaseTest
 [6] com.mycompany.sparkpoc.SocketServer
 [7] com.mycompany.sparkpoc.hbase.HBasePop
 

Но при выборе одного из семи параметров аргументы командной строки теряются:

 Enter number:

Invalid number: java.lang.NumberFormatException: For input string: ""
java.lang.RuntimeException: No main class detected.
        at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 3 s, completed Jun 25, 2014 6:12:07 PM
 

Ответ №1:

Вы можете передать их прямо из командной строки, просто заключив в кавычки, например:

 $ sbt "runMain com.mycompany.sparkpoc.hbase.HBasePop spark://localhost:7088 localhost:2181 1000 100"
 

Ответ №2:

Если вы хотите запустить определенный основной класс, вы можете использовать runMain , и для передачи аргументов командной строки вы должны указать их после имени основного класса.

 > help runMain
Runs the main class selected by the first argument, passing the remaining arguments to the main method.
 

Например

 > runMain sample.hello.Main firstArg secondArg thirdArg
 

Комментарии:

1. Это все еще актуально, но следующий ответ — «прямо из командной строки» — еще более прямой, поэтому я переключил принятие. Надеюсь, вы не возражаете 😉

Ответ №3:

Ближайший обходной путь немного хитрый, но все же приемлемый:

 sbt  (go into the console, not sure the following were possible directly from command line)
 

Теперь:

 run <command args>
 

Затем появляется список из 7 основных файлов.

Введите номер выбора (7 в моем случае)

Каким-то образом sbt «запоминает» параметры командной строки и запускает их сейчас.