2014-03-14 55 views
10

編輯20140716EXEC-Maven的插件說不能運行指定的程序,即使它是在PATH

Solution found

TL; DR = EXEC-Maven的插件不承認.cmd文件,但只有.bat文件,作爲可執行腳本。重命名grunt.cmd --> grunt.batbower.cmd --> bower.bat等作爲解決方法。


做完npm install -g grunt-cli我的系統上,grunt肯定是在PATH

當我運行maven install然而,這似乎並沒有註冊。

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

只是可以肯定,在同一個終端,我已執行此

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

...在同一個終端,我發出上述行家命令,咕嚕執行就好了。

exec-maven-plugin是否使用PATH環境變量,還是需要告知此可執行文件以其他方式存在?


編輯:

documentation表明,在PATH可執行文件應該可以找到,所以它進一步樹樁我。

回答

6

除了bguiz的回答,這將是最好的解決辦法,我已經使用Maven的配置文件創建了一個解決辦法,繞過問題。

這是一個臨時解決方案,直到maven-exec-plugin的bug得到修復。

請在此給予好評的bug報告:http://jira.codehaus.org/browse/MEXEC-118

編輯:該缺陷被解決,可以指向1.4快照來修復它。

<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

我試過使用這個命令和我的maven響應'進程退出,錯誤:1(退出值:1)'任何想法如何從maven獲得更多的調試信息? – dougajmcdonald

9

我翻譯了exec-maven-plugin的源代碼,發現這個片段。

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); 
    } 

我比較這另一個插件跑咕嚕任務從行家,並found this

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

...這爲我工作。所以基本上後者的工作原理是因爲WIndows中的所有命令都預置了cmd /c, 而exec-maven-plugin沒有,因爲它只對.bat的文件結束。在C:\Users\USER\AppData\Roaming\npm

看,我看到:

  • node_modules(文件夾)
  • grunt(UNIX腳本文件)
  • grunt.cmd(Windows腳本文件)

當我重新命名grunt.cmd - - >grunt.bat,這解決了這個問題,exec-maven-plugin能夠運行這個COM普通話。

(這也適用於使用npm install -g創建的其他可執行文件,如boweryo

+0

感謝您發現此問題的原因。我已經在這裏提交了一個補丁,請注意,如果你有同樣的問題! http://jira.codehaus.org/browse/MEXEC-137 –

+0

顯然這個問題是https://jira.codehaus.org/browse/MEXEC-118的重複,目前尚未解決。 –

+0

@PietvanDongen不客氣!順便說一句,你可能會發現這篇文章很有趣:[製作Maven Grunt,Windows Edition](http://blog.bguiz.com/post/79804496081/making-maven-grunt-windows-edition) - 請參閱「爲什麼可以」我的插件找到可執行文件?「 – bguiz

0

我對插件的1.5.0有同樣的問題。

在我的情況下,原因是我的用戶名中的空格導致咕嚕路徑: C:\ Users \我的名字與空間\ AppData \ Roaming \ npm。

當我將npm目錄的內容移動到一個沒有空格的路徑時,它工作。

+0

請看看其他的答案,關於如何回答shell的外觀以及應該提供哪些信息。此外,請看看[我如何寫出一個好答案](https://stackoverflow.com/help)。 –

相關問題