Не удается запустить программу "npm" в каталоге

Когда я перехожу к структуре папок src/main/app/, где у меня есть package.JSON и gruntfile, я могу запустить команду npm install и grunt. Но когда я пытаюсь запустить mvn jetty:run и файл свойств в корневой папке проекта, когда присутствует файл POM, он бросает ошибку, что он не может запустить npm install в структуре папок src/main/app/.

Это точная ошибка:

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (n
pminstall) on project my-abc-web: Command execution failed. Cannot
 run program "npm" (in directory "C:\Users\Achyut_J01\Documents\GitHub\infras\my-abc\my-abc-web\src\main\app"): CreatePro
cess error=2, The system cannot find the file specified -> [Help 1]

Это машина Windows.

Ответ 1

Очевидно, вы находитесь в системе Windows. npm - командный файл, а не исполняемый файл. Существуют проблемы, запускающие пакетный файл из плагина maven exec. Вы можете изучить обходное решение, предложенное в ссылке, например

  • деконструировать .bat script в его фактические команды
  • используйте cmd.exe и пройдите node в качестве параметра - обратитесь к этому.

Ответ 2

Я использовал это обходное решение, чтобы иметь кросс-платформенную сборку Maven: объявить исполняемое имя npm как переменную Maven и использовать фильтры Maven для изменения этого исполняемого имени при работе в Windows.

Он может работать одинаково для Grunt, Bower и т.д.

<properties>
    <npm.executable>npm</npm.executable>
</properties>

(...)

<build>
    <plugins>
        (...)
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.5.0</version>
            <executions>
                <execution>
                    <id>exec-npm</id>
                    <phase>process-resources</phase>
                    <configuration>
                        <executable>${npm.executable}</executable>
                        <arguments>
                            <argument>install</argument>
                        </arguments>
                    </configuration>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        (...)
    </plugins>
</build>
<profiles>
    <profile>
        <id>platform-windows</id>
        <activation>
            <os>
                <family>windows</family>
            </os>
        </activation>
        <properties>
            <!-- Override the executable names for Windows -->
            <npm.executable>npm.cmd</npm.executable>
            <grunt.executable>grunt.cmd</grunt.executable>
            <bower.executable>bower.cmd</bower.executable>
        </properties>
    </profile>
</profiles>

Ответ 3

В платформе Windows используйте npm.cmd для замены npm

Ответ 4

Подробнее см. ссылку: fooobar.com/info/546414/...

В каталоге, где установлен node, переименуйте командный файл так, чтобы был выбран существующий файл npm.cmd. Смотрите скриншот ниже: переименовать npm, чтобы npm.cmd был выбран по умолчанию в окнах

Этот метод предпочтительнее, если вы создаете проекты, ориентированные на linux и windows, оба. Более того, также, если нет. файлов pom также большой.