无法在目录中运行程序“npm”

时间:2014-03-28 09:04:36

标签: node.js maven gruntjs

当我遍历到src/main/app/文件夹结构时,我有package.JSON& gruntfile,我能够运行npm installgrunt命令。但是当我在POM文件存在时尝试在项目的根文件夹中运行mvn jetty:run和属性文件时,它会抛出错误,它无法在文件夹结构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机器。

5 个答案:

答案 0 :(得分:10)

我使用此解决方法来构建跨平台的Maven构建:将npm可执行文件名称声明为Maven变量,并在Windows上运行时使用Maven过滤器修改此可执行文件名称。

Grunt,Bower等也可以这样做。

如果您使用exec-maven-plugin> = 1.6.0 (感谢Manmay获取评论中的信息),则不再需要此解决方法:这是此插件的错误(见https://github.com/mojohaus/exec-maven-plugin/issues/42),已在1.6.0中修复(见https://github.com/mojohaus/exec-maven-plugin/pull/46

<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>

答案 1 :(得分:6)

在Windows平台中,使用 npm.cmd 替换 npm

答案 2 :(得分:1)

显然你在Windows系统上。 npm是批处理文件,不是可执行文件。有issues运行来自maven exec插件的批处理文件。您可能想要探索链接中建议的变通方法,例如

  • 将.bat脚本解构为实际命令
  • 使用cmd.exe并将节点作为参数传递 - refer to this

答案 3 :(得分:0)

请参阅链接了解详情:https://stackoverflow.com/a/48184182/4282901

在安装节点的目录中重命名批处理文件,以便选择现有的npm.cmd文件。见下面的截图: rename npm so that npm.cmd is picked by default in windows

如果您构建针对linux和windows两者的项目,则此方法更为可取。而且,如果没有。 pom文件也很大。

答案 4 :(得分:-2)

npm是一个shell脚本。

在Windows上将其重新命名为npm.sh对我有用。

Windows搜索了“ npm”,但没有找到, 然后尝试存在的npm.bat