配置Maven插件以粘在一起

时间:2009-09-17 09:30:01

标签: maven-2 maven-plugin

我有父pom配置某些插件

<pluginManagement>
   </plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
         ...
      </plugin>
   </plugins>
</pluginManagement>

我有poms树代表集成测试

A-\
   a1
   a2
B-\
   b1
   b2
C-\
   D-\
      d1
      d2

在每个a,b,d产品中

<build>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</build>

问题是当我需要将第四个插件添加到集成测试过程时,例如我的自定义插件我将需要移动 通过所有集成模块并进行手动添加。

您可以建议我删除<pluginManagement>以允许所有孩子隐式使用它们。 是的,但在那些只是'pom'的产品中,我不希望插件做任何事情:创建一些资源并放置jboss配置目录。

我想知道是否有某种

<pluginsBundle>
   <groupId>my.group</groupId>
   <artifactId>my-integration-test-bundle</artifactId>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</pluginsBundle>

允许我像

一样使用它
   <plugin>
      <groupId>my.group</groupId>
      <artifactId>my-integration-test-bundle</artifactId>
      <runOnce>true</runOnce>
   </plugin>

我想添加

等选项
<runOnce>true</runOnce>

能够启动应用程序服务器并在每个maven启动时仅部署一次目标。

2 个答案:

答案 0 :(得分:2)

我不知道一种能够完全符合您需要的机制。最好的办法是使用构建部分中定义的插件定义父pom,而不是pluginManagement部分。在这种情况下,将始终定义插件配置。将配置添加到父级中的配置文件意味着您可以对这些插件的激活进行一些控制。

要考虑的一个改进是,您可以通过文件的存在或不存在来控制配置文件的激活。这样,您可以在父项中定义配置文件,但在该项目中将其取消激活,因为父项中存在标记文件。子项目的源代码中没有标记文件,因此将为这些项目激活该配置文件。如果对大多数项目有意义,您可以使用missing代替exists来改变行为。

<profile>
  <id>build</id>
  <activation>
    <file>
      <missing>src/main/resources/build.marker</missing>
      <!-- or if you want to enable the profile when the file does exist:
      <exists>src/main/resources/build.marker</exists-->
    </file>
  </activation>
  <build>
    </plugins>
      <plugin>
        <artifactId>gmaven-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>cargo-maven2-plugin</artifactId>
        ...
      </plugin>
    </plugins>
  </build>
</profile>

或者,您可以尝试使用生命周期编写自定义插件,该生命周期在分叉生命周期中执行所有必需的mojos。我最近回答了another question有关如何执行此操作的详细信息。

另一种方法是编写另一个使用Maven shared-io应用描述符的插件 对于pom,该描述符可以定义合并到pom中的任意配置。另一个answer描述了如何做到这一点。

答案 1 :(得分:0)

AFAIK,没有办法声明可以在其他地方使用的插件包......但是有继承。

如何使用<plugins>部分中的<build>声明创建pom并在集成测试项目中继承此pom?这看起来很可行。