2013-07-17 63 views
1

我寫了一個maven插件,我在某些項目上使用。在第一個項目時,它僅具有一個執行和I可直接與Maven插件多執行時,不執行插件時單獨執行插件

mvn com.mycompany:my-plugin:0.0.1-SNAPSHOT:do-stuff 

執行插件在第二個項目中,插件有多個執行,當我嘗試上述命令,我最終由於吹插件嘗試使用空參數執行。

請注意,在這兩種情況下,插件在作爲流程資源階段的一部分執行時都可以正常工作。當我嘗試執行插件目標時,它只會失敗。有人能幫我理解爲什麼第二個例子試圖用空白參數執行嗎?

第一個項目(一個執行 - 正常工作):

 <plugin> 
      <groupId>com.mycompany</groupId> 
      <artifactId>my-plugin</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <configuration> 
       <sourceFiles> 
        <sourceFile>loadfile</sourceFile> 
       </sourceFiles> 
       <outputFile>outputFile</outputFile> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>do-stuff</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

第二個項目(多執行 - 不炒鍋):

<plugin> 
     <groupId>com.my-company</groupId> 
     <artifactId>my-plugin</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <executions> 
      <execution> 
       <id>default</id> 
       <phase>process-resources</phase> 
       <configuration> 
        <sourceFiles> 
         <sourceFile>file1</sourceFile> 
        </sourceFiles> 
        <outputFile>outputFile</outputFile> 
       </configuration> 
       <goals> 
        <goal>do-stuff</goal> 
       </goals> 
      </execution> 
      <execution> 
       <id>novice</id> 
       <phase>process-resources</phase> 
       <configuration> 
        <sourceFiles> 
         <sourceFile>file1</sourceFile> 
         <sourceFile>file2</sourceFile> 
        </sourceFiles> 
        <outputFile>outputFile</outputFile> 
       </configuration> 
       <goals> 
        <goal>do-stuff</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

回答

1

在第二個例子中,只有你有的配置是在executions。在執行綁定之外沒有configuration塊,因此直接調用插件目標自然不會收到參數(因爲當前的configuration塊是特定於綁定的)。

的溶液。將有一個「默認」 configuration塊(如在第一個例子)+ execution特異性CONFIGS,或通過命令行提供configuration PARAMS,如果適用的話。

最後要注意的 - 而不是有意侮辱,每一個程序員有時錯過簡單的解決方案 - 因爲它是插件,你可以改變的配置規格,讓您定義在一個configuration塊所需要的一切:)。我不認爲你應該這樣做,因爲唯一的原因似乎是你的具體問題m2e,但它肯定是一個選項。

+0

有沒有辦法讓它做所有的執行,缺少整個目標階段的運行? –

+1

小挑逗,「目標」就是你的插件定義的內容,「階段」是目標的執行必然要實現的目標。不幸的是,我並不知道這樣的解決方案,除了在命令行中使用目標和不同的配置參數調用'mvn'外殼腳本之外。但是你的問題引發了一個紅旗:你確定你沒有試圖將Maven用於它不適用的東西?這裏有什麼情況? –

+0

感謝您的澄清。我們有一個在流程資源階段執行的插件來準備額外的資源。 CLI沒有問題,但該插件還沒有M2E知道,所以我們希望能夠啓動一個eclipse,它只運行所有的插件執行。我想我可以爲mvn process-resources創建一個啓動程序,並且工作正常,但我仍然好奇是否有辦法執行所有插件執行(而不是我們在進程資源中執行其他任何操作)。 –