2010-10-05 30 views
1

Si je crée un projet SBT, même un simple "hello world", compile (avec succès) puis exec, l'erreur suivante est levée. Quelle peut être la raison et comment y remédier?Lorsque j'essaie d'exécuter "exec" dans SBT, j'obtiens "Erreur exécutant exec: java.lang.ArrayIndexOutOfBoundsException: 0". Comment réparer?

 

java.lang.ArrayIndexOutOfBoundsException: 0 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
    at sbt.SimpleProcessBuilder.run(ProcessImpl.scala:381) 
    at sbt.AbstractProcessBuilder.run(ProcessImpl.scala:130) 
    at sbt.AbstractProcessBuilder.$bang(ProcessImpl.scala:158) 
    at sbt.ExecProject$$anonfun$execOut$1.apply(ScalaProject.scala:436) 
    at sbt.ExecProject$$anonfun$execOut$1.apply(ScalaProject.scala:435) 
    at sbt.TaskManager$Task.invoke(TaskManager.scala:62) 
    at sbt.impl.RunTask.doRun$1(RunTask.scala:77) 
    at sbt.impl.RunTask.runTask(RunTask.scala:85) 
    at sbt.impl.RunTask.run(RunTask.scala:32) 
    at sbt.impl.RunTask$.apply(RunTask.scala:17) 
    at sbt.impl.RunTask$.apply(RunTask.scala:16) 
    at sbt.Project$class.run(Project.scala:98) 
    at sbt.Project$class.call(Project.scala:93) 
    at sbt.BasicScalaProject.call(DefaultProject.scala:21) 
    at sbt.xMain$$anonfun$7.apply(Main.scala:512) 
    at sbt.xMain$$anonfun$7.apply(Main.scala:512) 
    at sbt.xMain.withAction(Main.scala:541) 
    at sbt.xMain.sbt$xMain$$handleAction(Main.scala:512) 
    at sbt.xMain.handleCommand(Main.scala:502) 
    at sbt.xMain.processAction(Main.scala:441) 
    at sbt.xMain.process$1(Main.scala:257) 
    at sbt.xMain$Continue$1.apply(Main.scala:132) 
    at sbt.xMain.run$1(Main.scala:136) 
    at sbt.xMain.processArguments(Main.scala:266) 
    at sbt.xMain.startProject(Main.scala:107) 
    at sbt.xMain.run(Main.scala:84) 
    at sbt.xMain.run0$1(Main.scala:35) 
    at sbt.xMain.run(Main.scala:42) 
    at xsbt.boot.Launch$.run(Launch.scala:53) 
    at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42) 
    at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:42) 
    at xsbt.boot.Launch$.launch(Launch.scala:57) 
    at xsbt.boot.Launch$.explicit(Launch.scala:42) 
    at xsbt.boot.Launch$.initialized(Launch.scala:38) 
    at xsbt.boot.Launch$.parsed(Launch.scala:31) 
    at xsbt.boot.Launch$.configured(Launch.scala:21) 
    at xsbt.boot.Launch$.apply(Launch.scala:16) 
    at xsbt.boot.Launch$.apply(Launch.scala:13) 
    at xsbt.boot.Boot$.runImpl(Boot.scala:24) 
    at xsbt.boot.Boot$.run(Boot.scala:19) 
    at xsbt.boot.Boot$.main(Boot.scala:15) 
    at xsbt.boot.Boot.main(Boot.scala) 
[info] == exec == 
[error] Error running exec: java.lang.ArrayIndexOutOfBoundsException: 0 
 

Répondre

2

Le but de l'action de construction exec est d'exécuter une commande sur la coque sous-jacente. En tant que tel, il doit être suivi d'une commande. EG:

exec killall firefox 

Sous les couvertures, les appels SBT java.lang.ProcessBuilder, qui lance cette exception si l'appelant essaie de démarrer, mais n'a pas fourni de paramètres.

IndexOutOfBoundsException - If the command is an empty list (has size 0) 

Je pense que SBT ne devrait pas propager cette exception et qu'il s'agit d'un bug. Vous devriez recevoir un message d'erreur à la place.

Peut-être que vous étiez à la recherche de l'action de construction exécuter, qui appellera votre classe principale.

+1

J'ai ajouté cela comme un bug (# 122). – Synesso