【问题标题】:Where should be placed maven-compiler-plugin declaration: in <plugins> or <pluginManagement>?应该在哪里放置 maven-compiler-plugin 声明:在 <plugins> 或 <pluginManagement> 中?
【发布时间】:2012-12-07 05:12:14
【问题描述】:

我有一个多模块 maven 项目,我想让我的所有子模块使用根 pom.xml 中指定的 maven-compiler-plugin。我应该在哪里放置maven-compiler-plugin 声明(在根pom.xml 中):在&lt;plugins&gt; 部分或&lt;pluginManagement&gt; 部分?问题也与maven-release-plugin 有关。

【问题讨论】:

    标签: java maven


    【解决方案1】:

    这两个部分(pluginspluginManagement)的用途略有不同。

    第一个(plugins)用于指定您的项目(以及从父项目继承的所有子项目)的构建过程。如果您在此部分中包含一些插件,它将在每个子项目中执行,无论其类型如何。

    第二个(pluginManagement)用于指定所有从父项目继承的项目的通用插件设置(例如,插件版本和配置)。

    谈到您提到的 2 个插件。 maven-compiler-plugin 是一个默认插件,无论你是否指定它都会被执行。将其包含在pluginManagement 中并在那里指定其配置是有意义的。但是,maven-release-plugin 默认不绑定到任何生命周期阶段。因此,如果您希望它在所有子项目中执行,则必须将其添加到 plugins 部分。

    【讨论】:

    • 感谢您的明确答复。你能解释一下,为什么 maven-compiler-pluginmaven-release-plugin 相比默认不执行?或者我在哪里可以看到在生命周期阶段默认执行的插件列表?
    • 不客气。默认插件列表及其目标取决于项目打包。你可以阅读更多关于它的内容here(其实整页都值得一读)。
    • 那么maven-surfire-plugin呢?在您的解释之后,我认为它应该放在 pluginManagement 中,因为它绑定到 maven 的“测试”阶段......这是真的吗?
    • 是的,这是真的。 surefire 是运行测试的默认插件,因此将其放入 pluginManagement 是有意义的。
    【解决方案2】:

    这取决于你追求什么。如果您将它们包含在 plugins 部分下,它们将为所有 POM 执行...包括父级。如果您只希望子 POM 执行插件目标,则应将它们放在 pluginManagement 下。但是,在这种情况下,您必须在每个子 POM 中启用它们。

    也就是说,最简单的方法是先在plugins 下尝试。如果没有构建失败,那么您就可以开始了。否则,您需要将部分或全部移至pluginManagement

    【讨论】:

    • 所以在&lt;plugins&gt; 部分(在root 的pom.xml 的情况下)我们可以在子模块中标记我们需要的所有插件(无需在子模块中明确指定它们)。而在&lt;pluginManagement&gt; 中,我们只声明了插件configuration(例如版本),我们还需要在子模块中声明它们吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多