web-dev-qa-db-fra.com

Impossible d'exécuter le programme "npm" dans le répertoire

Lorsque je traverse la structure du dossier to src/main/app/ où j'ai le package.JSON & gruntfile, je suis en mesure d'exécuter la commande npm install et grunt. Mais lorsque j'essaie d'exécuter le mvn jetty:run et un fichier de propriétés dans le dossier racine du projet lorsque le fichier POM est présent, il génère une erreur indiquant qu'il ne peut pas exécuter npm install dans la structure de dossiers src/main/app/.

C'est l'erreur exacte:

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

C'est une machine Windows.

12
Achyut

De toute évidence, vous êtes sur un système Windows. npm est un fichier de commandes et non un exécutable. Il y a issues exécuter un fichier de commandes à partir du plugin maven exec. Vous voudrez peut-être explorer la solution de contournement suggérée dans le lien, comme 

  • déconstruire le script .bat en ses commandes réelles 
  • utilisez cmd.exe et passez noeud en tant que paramètre - reportez-vous à ceci .
1
Raghuram

J'ai utilisé cette solution de contournement pour avoir une construction Maven multiplate-forme: déclarez le nom de l'exécutable npm en tant que variable Maven et utilisez les filtres Maven pour modifier ce nom d'exécutable sous Windows.

Cela peut fonctionner de la même manière pour Grunt, Bower, etc.

Cette solution de contournement n'est plus nécessaire si vous utilisez exec-maven-plugin> = 1.6.0 (merci Manmay pour les informations contenues dans les commentaires): il s'agissait d'un bogue de ce plugin (voir https: //github.com/mojohaus/exec-maven-plugin/issues/42 ), qui a été corrigé dans la version 1.6.0 (voir 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>
8
Mossroy

Sous Windows, utilisez npm.cmd pour remplacer npm  

6
dadanier

Voir le lien pour plus de détails: https://stackoverflow.com/a/48184182/4282901

Dans le répertoire où le noeud est installé, renommez le fichier de commandes pour que le fichier npm.cmd existant soit sélectionné. Voir capture d'écran ci-dessous:  rename npm so that npm.cmd is picked by default in windows

Cette méthode est préférable si vous construisez les projets ciblant Linux et Windows. En outre, même si le no. des fichiers pom est également grande.

0
Syed Osama Maruf