2013-07-17 136 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创建一个启动程序,并且工作正常,但我仍然好奇是否有办法执行所有插件执行(而不是我们在进程资源中执行其他任何操作)。 –