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.
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
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>
Sous Windows, utilisez npm.cmd pour remplacer npm
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:
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.