#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 «запоминает» параметры командной строки и запускает их сейчас.