platypii / sbt-typescript

An sbt plugin for compiling typescript
Apache License 2.0
11 stars 1 forks source link

[Windows] Cannot run program "node": Malformed argument has embedded quotes #1

Open platypii opened 3 years ago

platypii commented 3 years ago

Using sbt-typescript to generate assets on a windows system throws an exception:

[info] Typescript compiling on 1 source(s)
[ERROR] [12/19/2020 14:08:56.686] [sbt-web-akka.actor.default-dispatcher-4] [akka://sbt-web/user/$a/process] Cannot run program "node": Malformed argument has embedded quote: [[\"C:\\Users\\User\\sbt-typescript\\example\\app\\assets\\ts\\index.ts\",\"ts\\index.ts\"]]
akka.actor.ActorInitializationException: akka://sbt-web/user/$a/process: exception during creation
        at akka.actor.ActorInitializationException$.apply(Actor.scala:193)
        at akka.actor.ActorCell.create(ActorCell.scala:669)
        at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:523)
        at akka.actor.ActorCell.systemInvoke(ActorCell.scala:545)
        at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:283)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at akka.util.Reflect$.instantiate(Reflect.scala:66)
        at akka.actor.ArgsReflectConstructor.produce(IndirectActorProducer.scala:96)
        at akka.actor.Props.newActor(Props.scala:212)
        at akka.actor.ActorCell.newActor(ActorCell.scala:624)
        at akka.actor.ActorCell.create(ActorCell.scala:650)
        ... 7 more
Caused by: java.io.IOException: Cannot run program "node": Malformed argument has embedded quote: [[\"C:\\Users\\User\\sbt-typescript\\example\\app\\assets\\ts\\index.ts\",\"ts\\index.ts\"]]
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
        at akka.contrib.process.BlockingProcess.<init>(BlockingProcess.scala:55)
        ... 16 more
Caused by: java.lang.IllegalArgumentException: Malformed argument has embedded quote: [[\"C:\\Users\\User\\sbt-typescript\\example\\app\\assets\\ts\\index.ts\",\"ts\\index.ts\"]]
        at java.base/java.lang.ProcessImpl.needsEscaping(ProcessImpl.java:312)
        at java.base/java.lang.ProcessImpl.createCommandLine(ProcessImpl.java:235)
        at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:470)
        at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:154)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
        ... 18 more
platypii commented 3 years ago

This appears to be a JVM change in security policy on windows systems. Other users ran into this with the underlying sbt-js-engine: https://github.com/sbt/sbt-js-engine/issues/68

There is a workaround by setting -Djdk.lang.Process.allowAmbiguousCommands=true in a .jvmopts file.

I consider this a hack, looking for a proper fix.