【问题标题】:Maven - Parent Pom - Child InheritanceMaven - 父 Pom - 子继承
【发布时间】:2012-03-17 16:18:52
【问题描述】:

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

我基本上可以在我将所有带有配置的插件放入父 pom.xml 的地方使用它。然后在子 poms 中我仍然必须声明插件,但没有版本和配置信息。

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

家长会

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

【问题讨论】:

    标签: maven


    【解决方案1】:

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

    如果您想避免这种情况,可以将这些信息放入&lt;build&gt; 部分,如下所示:

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

    【讨论】:

    • @Nishant 进一步解释了为什么这样做。默认情况下,在&lt;pluginManagement&gt; 之外声明的插件由子 POM 继承。如果需要,每个孩子都可以覆盖他们的设置。在&lt;pluginManagement&gt; 中声明的插件为所有明确配置为使用这些插件的子 POM 配置全局设置(如原始示例中所示)。它们的设置也可能在子 POM 中被覆盖。
    • @AndrewLogvinov @hotshot309 @Nishant,当你的答案中提到的 &lt;build&gt; &lt;plugins&gt; 放置时,当子 pom 通过用自己的 &lt;configuration&gt;&lt;executions&gt; 声明插件来覆盖它但没有提及子 pom 中的插件 &lt;version&gt; 然后它会继承/解析父 pom 中提到的版本还是默认为最新版本?
    【解决方案2】:

    不要使用pluginManagement,而是尝试仅使用&lt;plugins&gt; 标签。它应该是自动继承的。您可以选择覆盖子 pom 中的配置。通过mvn help:effective-pom检查,

    【讨论】:

    • 遗憾的是有效的 pom 没有显示插件的默认绑定阶段
    • @Nishant,在您的回答中提到的 &lt;plugins&gt; 中放置时,当子 pom 通过用自己的 &lt;configuration&gt;&lt;executions&gt; 声明插件来覆盖它但没有提及插件 @987654328 @ 在子 pom 中,它会继承/解析父 pom 中提到的版本还是默认为最新版本?
    【解决方案3】:

    你不能避免在子 pom 中命名插件,因为 maven 应该如何知道你正在使用哪个插件。 pluginManagement 部分用于定义插件的版本,此外它还用于定义默认配置。

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2012-12-22
      • 2021-07-12
      • 2016-12-17
      • 2020-06-27
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多