Maven - 父Pom - 儿童继承

时间:2012-02-28 07:09:18

标签: maven

我正在尝试创建一个maven父pom设置,我不必在我的孩子pom中声明任何插件信息,所有内容都来自父pom。

我基本上把它放在我将所有插件都配置到父pom中的地方。然后在子poms我必须声明插件仍然,但没有版本和配置信息。

我根本不想在孩子中声明插件。通过这种方式,我可以向我的父pom添加新功能(例如pmd,freebugs等),现在我的所有项目都可以使用它们。我怎么能做到这一点?

父Pom

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-plugin</artifactId>
            <version>1.0</version>
            <inherited>true</inherited>
            <configuration>
                <providerImplementations>
                    <cvs>cvs_native</cvs>
                </providerImplementations>
                <systemProperties>
                    <property>
                        <name>maven.scm.perforce.clientspec.name</name>
                        <value>${perforceClientSpec}</value>
                    </property>
                </systemProperties>
            </configuration>
        </plugin>

Child Pom仍然需要这个,但如果我可以避免,我不想这样做:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-scm-plugin</artifactId>
</plugin>

3 个答案:

答案 0 :(得分:29)

<pluginManagement>部分旨在配置从此继承的项目构建。但是,这只配置子项中插件元素中实际引用的插件(因此您必须明确指定它们,如您所示)。查看更多here

如果您想避免这种情况,可以将此信息放入<build>部分,如下所示:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-scm-plugin</artifactId>
      <version>1.0</version>
      <configuration>
        <...>
      </configuration>
      <executions>
        <...>
      </executions>
    </plugin>
  </plugins>
</build>

答案 1 :(得分:14)

请尝试仅使用<plugins>标记,而不是使用pluginManagement。它应该是自动继承的。您可以选择覆盖子pom中的配置。按mvn help:effective-pom

检查

答案 2 :(得分:1)

您无法避免在子pom中命名插件,因此maven应该知道您使用的是哪个插件。 pluginManagement部分用于定义插件的版本,此外它还用于定义默认配置。