spectral-intellij-plugin icon indicating copy to clipboard operation
spectral-intellij-plugin copied to clipboard

Cannot run program "spectral"

Open dishatkr opened this issue 1 year ago • 3 comments

I'm using spectral plugin version 3.0.1 and Intellij 2023.3.5 in Windows, but get the below error :

com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "spectral" (in directory "H:\my-folder\poc\my-project"): CreateProcess error=2, The system cannot find the file specified at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:356) at com.schwarzit.spectralIntellijPlugin.CommandLineExecutor.execute(CommandLineExecutor.kt:17) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.execute(SpectralRunner.kt:56) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.run(SpectralRunner.kt:41) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.lintFile(SpectralExternalAnnotator.kt:103) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate$lambda$1(SpectralExternalAnnotator.kt:81) at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:71) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173) at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:71) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:90) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:23) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:207) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:201) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$0(ExternalToolPass.java:164) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.runChangeAware(ExternalToolPass.java:266) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$2(ExternalToolPass.java:164) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173) at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:360) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:162) at com.intellij.util.ui.update.Update.runUpdate(Update.java:114) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:348) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:338) at com.intellij.util.ui.update.MergingUpdateQueue.doFlush(MergingUpdateQueue.java:295) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:277) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:246) at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:254) at com.intellij.util.Alarm$Request.runSafely(Alarm.java:373) at com.intellij.util.Alarm$Request.run(Alarm.java:360) at com.intellij.util.concurrency.Propagation.contextAwareCallable$lambda$2(propagation.kt:328) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272) at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249) at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31) at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218) at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:215) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699) at java.base/java.lang.Thread.run(Thread.java:840) Caused by: java.io.IOException: Cannot run program "spectral" (in directory "H:\my-folder\poc\my-project"): CreateProcess error=2, The system cannot find the file specified at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:432) at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:346) ... 54 more Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified at java.base/java.lang.ProcessImpl.create(Native Method) at java.base/java.lang.ProcessImpl.(ProcessImpl.java:499) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ... 57 more

dishatkr avatar Dec 18 '23 22:12 dishatkr

try this configuration /H/my-folder/...

RomainBonnetier avatar Feb 21 '24 08:02 RomainBonnetier

This error is happening because the spectral cli needs to be installed and available on path.

On Mac I fixed this by

npm install -g @stoplight/spectral-cli

haytona avatar Apr 04 '24 01:04 haytona

Same problem after : npm install -g @stoplight/spectral-cli

I can run spectral in terminal intelliJ plugin don't work :

OS : AlmaLinux release 8.7 IntelliJ 2024.1.1 Ultimate Plugin version : 3.0.1 spectral version : 6.11.1

com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "spectral" (in directory "/home/user/repos/aai-model"): error=2, No such file or directory at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:367) at com.schwarzit.spectralIntellijPlugin.CommandLineExecutor.execute(CommandLineExecutor.kt:17) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.execute(SpectralRunner.kt:56) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.run(SpectralRunner.kt:41) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.lintFile(SpectralExternalAnnotator.kt:103) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate$lambda$1(SpectralExternalAnnotator.kt:81) at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:100) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:221) at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:46) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:220) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:202) at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:100) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:90) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:23) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.lambda$doAnnotate$1(ExternalToolPass.java:208) at com.intellij.codeInsight.daemon.impl.AnnotationSessionImpl.computeWithSession(AnnotationSessionImpl.java:80) at com.intellij.codeInsight.daemon.impl.AnnotationSessionImpl.computeWithSession(AnnotationSessionImpl.java:72) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:206) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:200) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$0(ExternalToolPass.java:163) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.runChangeAware(ExternalToolPass.java:268) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$2(ExternalToolPass.java:163) at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$15(BackgroundTaskUtil.java:371) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:217) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:202) at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:366) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:161) at com.intellij.util.ui.update.ContextAwareUpdate.run$lambda$1$lambda$0(ContextAwareUpdate.kt:49) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:81) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:81) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:86) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:81) at com.intellij.util.ui.update.ContextAwareUpdate.run(ContextAwareUpdate.kt:48) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:354) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:344) at com.intellij.util.ui.update.MergingUpdateQueue.doFlush(MergingUpdateQueue.java:301) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:283) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:250) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:81) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:81) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:86) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:81) at com.intellij.util.Alarm$Request.lambda$runSafely$0(Alarm.java:369) at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:253) at com.intellij.util.Alarm$Request.runSafely(Alarm.java:369) at com.intellij.util.Alarm$Request.run(Alarm.java:356) at com.intellij.util.concurrency.Propagation.contextAwareCallable$lambda$2(propagation.kt:357) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272) at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:244) at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30) at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:222) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218) at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:210) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699) at java.base/java.lang.Thread.run(Thread.java:840) Caused by: java.io.IOException: Cannot run program "spectral" (in directory "/home/user/repos/aai-model"): error=2, No such file or directory at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:491) at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:464) at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:357) ... 70 more Caused by: java.io.IOException: error=2, No such file or directory at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) at java.base/java.lang.ProcessImpl.(ProcessImpl.java:314) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ... 74 more

xobix avatar May 16 '24 13:05 xobix

Same problem here.

OS: Ubuntu 23 IDE: IntelliJ 2024.2.4 Plugin version: 3.0.1 spectral-cli: 6.13.1

Stacktrace: com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "spectral" (in directory "/home/mikolaj/work/"): error=2, No such file or directory at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:384) at com.schwarzit.spectralIntellijPlugin.CommandLineExecutor.execute(CommandLineExecutor.kt:17) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.execute(SpectralRunner.kt:56) at com.schwarzit.spectralIntellijPlugin.SpectralRunner.run(SpectralRunner.kt:41) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.lintFile(SpectralExternalAnnotator.kt:103) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate$lambda$1(SpectralExternalAnnotator.kt:81) at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:98) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:221) at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:49) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:220) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:202) at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:98) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:90) at com.schwarzit.spectralIntellijPlugin.SpectralExternalAnnotator.doAnnotate(SpectralExternalAnnotator.kt:23) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.lambda$doAnnotate$1(ExternalToolPass.java:220) at com.intellij.codeInsight.daemon.impl.AnnotationSessionImpl.computeWithSession(AnnotationSessionImpl.java:87) at com.intellij.codeInsight.daemon.impl.AnnotationSessionImpl.computeWithSession(AnnotationSessionImpl.java:79) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:218) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.doAnnotate(ExternalToolPass.java:212) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$0(ExternalToolPass.java:170) at com.intellij.codeInsight.daemon.impl.ExternalToolPass.runChangeAware(ExternalToolPass.java:283) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.lambda$run$2(ExternalToolPass.java:170) at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$15(BackgroundTaskUtil.java:371) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:217) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:202) at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:366) at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:168) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:366) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:356) at com.intellij.util.ui.update.MergingUpdateQueue.doFlush(MergingUpdateQueue.java:313) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:295) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:262) at com.intellij.util.Alarm$Request.lambda$runSafely$0(Alarm.java:371) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:92) at com.intellij.util.concurrency.ChildContext$runAsCoroutine$1.invoke(propagation.kt:92) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:97) at com.intellij.util.concurrency.ChildContext.runAsCoroutine(propagation.kt:92) at com.intellij.util.Alarm$Request.lambda$runSafely$1(Alarm.java:369) at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:255) at com.intellij.util.Alarm$Request.runSafely(Alarm.java:368) at com.intellij.util.Alarm$Request.run(Alarm.java:356) at com.intellij.util.concurrency.Propagation.contextAwareCallable$lambda$2(propagation.kt:383) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272) at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249) at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:30) at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218) at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:212) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.io.IOException: Cannot run program "spectral" (in directory "/home/mikolaj/work"): error=2, No such file or directory at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:463) at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:469) at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:374) ... 65 more Caused by: java.io.IOException: error=2, No such file or directory at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) at java.base/java.lang.ProcessImpl.(ProcessImpl.java:295) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:225) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ... 69 more

mikolajchmielecki avatar Oct 29 '24 10:10 mikolajchmielecki

On windows, you can't simply "create process", taking the cmd script name as an input (and spectral.cmd is really a cmd script).

The proper solution is likely to be #126, but as an interim fix, I've assembled the native binary from the program below using GraalVM compiler, and dropped it as spectral.exe into NodeJS installation directory.

import java.util.Arrays;
import java.util.stream.Stream;

public class SpectralBinaryRunner {
    public static void main(String... args) {
        var fullArgs = Stream.concat(
            Stream.of("cmd", "/C", "spectral.cmd"),
            Arrays.stream(args)
        ).toList();
        try {
            var process = new ProcessBuilder(fullArgs).inheritIO().start();
            var exitCode = process.waitFor();
            System.exit(exitCode);
        } catch (Exception e) {
            e.printStackTrace(System.err);
            System.exit(-1);
        }
    }
}

Compilation:

javac SpectralBinaryRunner.java
native-image.cmd SpectralBinaryRunner

anenviousguest avatar Jan 20 '25 15:01 anenviousguest

I'm partially retracting my comment above.

Actually there is a proper Windows binary for spectral which is in fact a standalone executable which includes pre-packaged nodejs and all stuff, but obviously it's not installed when you do npm install -g @stoplight/spectral-core.

So in order to overcome the original error:

com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "spectral" (in directory "H:\my-folder\poc\my-project"): CreateProcess error=2, The system cannot find the file specified

You get to put that windows spectral binary on a PATH and not use the globally installed @stoplight/spectral-core package.

If you for some reason need / want to stick to npm package usage, then assembling the binary as described above here should also do the trick.

anenviousguest avatar Jan 22 '25 08:01 anenviousguest

Closing this as installing the spectral executable as a proper binary should resolve the issue without affecting existing users who were already doing so. If there are still issues related to this, feel free to comment them here so the issue can be re-opened if neccessary.

markbrockhoff avatar Jan 22 '25 08:01 markbrockhoff