Не удается запустить программу "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 также большой.