2014-03-14 9 views
10

bearbeiten 20.140.716:exec-Maven-Plugin sagt nicht Programm ausführen angegeben, obwohl es auf der PATH ist

Solution found

tl; dr = exec-Maven-Plugin nicht nicht erkennen .cmd Dateien, aber nur .bat Dateien, als ausführbare Skripte. Benennen Sie grunt.cmd --> grunt.bat, bower.cmd --> bower.bat usw. um, um dieses Problem zu umgehen.


npm install -g grunt-cli auf meinem System durchgeführt haben, grunt ist mit Sicherheit auf der PATH

Als ich maven install jedoch laufen, ist dies nicht zu registrieren scheint.

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec 
    (build-spa-bower) on project foobar: Command execution failed. 
    Cannot run program "grunt" (in directory "C:\workspace\foobar\src\main\spa"): 
    CreateProcess error=2, The system cannot find the file specified -> [Help 1] 
    org.apache.maven.lifecycle.LifecycleExecutionException: 
    Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec 
    (build-spa-bower) on project foobar: Command execution failed. 

Nur um sicher zu sein, in der gleichen Klemme, habe ich diese

cd C:\workspace\foobar\src\main\spa 
grunt build 

... in der gleichen Klemme ausgeführt, wie ich den Maven-Befehl oben ausgegeben, und Grunzen führt nur in Ordnung.

Verwendet exec-maven-plugin die Umgebungsvariable PATH, oder muss man wissen, dass diese ausführbare Datei auf andere Weise existiert?


EDIT:

Diese documentation schlägt vor, dass ausführbare Dateien auf PATH gefunden werden sollte, so ist es mir weitere Stümpfe.

Antwort

6

Neben ‚Antwort auf bguiz, was die beste Lösung wäre, habe ich eine Abhilfe mit Maven Profilen erstellt, unter Umgehung das Problem.

Dies ist eine temporäre Lösung, bis der Fehler des Maven-Exec-Plugins behoben ist.

Bitte upvote den Fehlerbericht hier: http://jira.codehaus.org/browse/MEXEC-118

Edit: Der Fehler behoben ist, können Sie auf 1,4-snapshot zeigen, es zu beheben.

<project> 
(...) 
    <profiles> 
     <profile> 
      <id>grunt-exec-windows</id> 
      <activation> 
       <os> 
        <family>Windows</family> 
       </os> 
      </activation> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>exec-maven-plugin</artifactId> 
         <version>${exec-maven-plugin.version}</version> 
         <executions> 
          <execution> 
           <id>grunt-default</id> 
           <phase>generate-resources</phase> 
           <configuration> 
            <executable>cmd</executable> 
            <arguments> 
             <argument>/C</argument> 
             <argument>grunt</argument> 
            </arguments> 
           </configuration> 
           <goals> 
            <goal>exec</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 
+0

Ich habe versucht, dies zu verwenden Befehl und meine Maven reagiert mit 'Prozess mit einem Fehler beendet: 1 (Exit-Wert: 1)' irgendwelche Ideen, wie Sie mehr Debugging-Informationen von Maven bekommen? – dougajmcdonald

9

Ich grub in den Quellcode von exec-maven-plugin und fand dieses Snippet.

Von der Quelle von ExecMojo#getExecutablePath:

CommandLine toRet; 
    if (OS.isFamilyWindows() && exec.toLowerCase(Locale.getDefault()).endsWith(".bat")) 
    { 
     toRet = new CommandLine("cmd"); 
     toRet.addArgument("/c"); 
     toRet.addArgument(exec); 
    } 
    else 
    { 
     toRet = new CommandLine(exec); 
    } 

Ich vergleichen diese zu einem anderen Plugin, das von Maven lief Grunzen Aufgaben und found this

 if (isWindows()) { 
      command = "cmd /c " + command; 
     } 

... und das für mich gearbeitet. Im Wesentlichen funktionierte letzteres, weil alle Befehle in Windows mit cmd /c, vorangestellt wurden, während das exec-maven-plugin nicht tat, weil es nur für Dateiende in .bat tat.

in C:\Users\USER\AppData\Roaming\npm Sehen, ich sehe:

  • node_modules (Ordner)
  • grunt (Unix-Script-Datei)
  • grunt.cmd (Windows Script-Datei)

Wenn ich umbenennen grunt.cmd - ->grunt.bat, löst dies das Problem, und exec-maven-plugin ist in der Lage, diese com auszuführen mand.

(dies gilt auch andere ausführbare Dateien zu npm install -g erstellt, wie bower und yo)

+0

Vielen Dank, dass Sie die Ursache für dieses Problem gefunden haben. Ich habe hier einen Patch eingereicht, bitte upvote, wenn Sie das gleiche Problem haben! http://jira.codehaus.org/browse/MEXEC-137 –

+0

Anscheinend ist dieses Problem ein Duplikat von https://jira.codehaus.org/browse/MEXEC-118, das noch nicht gelöst ist. –

+0

@PietvanDongen du bist willkommen! Übrigens könntest du diesen Beitrag interessant finden: [Making Maven Grunt, Windows Edition] (http://blog.bguiz.com/post/79804496081/making-maven-grunt-windows-edition) - siehe Abschnitt "Warum kann" t mein Plugin finde ausführbare Dateien? " – bguiz

0

Ich hatte das gleiche Problem mit 1.5.0 des Plugins.

Die Ursache in meinem Fall war Leerzeichen in meinem Benutzernamen, was zu einem Grunt Pfad: C: \ Benutzer \ Mein Name mit Leerzeichen \ AppData \ Roaming \ Npm.

Wenn ich den Inhalt des NPM-Verzeichnisses in einen Pfad ohne Leerzeichen verschoben habe, funktionierte es.

+0

Bitte werfen Sie einen Blick auf die anderen Antworten mit upvotes, um zu sehen, wie Antworten Shell aussehen und welche Informationen sie bereitstellen sollten. Sehen Sie sich auch [wie schreibe ich eine gute Antwort] an (https://stackoverflow.com/help). –

Verwandte Themen