Gio*_*nJh 4 java pom.xml maven
如果我错了,请纠正我。如果 Maven 中没有定义打包类型pom.xml,jar则默认使用生命周期。
每个 Maven 打包类型都有一个默认的构建生命周期和关联的默认目标。(我们可以将目标视为插件+命令)
生命周期阶段目标
我的问题是:
在定义打包类型时,我们是否可以说pom.xml插件部分填充了该打包构建生命周期的默认插件和目标?
另外:
如果我们在插件部分定义一个插件,例如编译器插件,并给出其配置,这些配置是否会覆盖插件默认配置?
如果maven pom.xml中没有定义打包类型,则使用jar生命周期。
几乎正确,jar不是生命周期,而是包装。Maven 具有三个 构建生命周期(clean、default、site),可以应用于任何打包。
根据官方Maven 模型
packaging该项目生成的工件类型,例如 jar war Ear pom。插件可以创建自己的包装,因此也可以创建自己的包装类型,因此此列表不包含所有可能的类型。
默认值为:jar。
每个 Maven 打包类型都有一个默认的构建生命周期
它没有默认的生命周期,您可以在其项目上调用默认的生命周期。它具有默认生命周期的默认绑定,也就是说,插件已经根据定义的packaging类型默认附加到默认生命周期的阶段。
Maven 的核心概念之一是约定优于配置。它的默认绑定强制执行这一原则,已经为给定的包提供了某些插件的某些目标的执行。
例如,默认maven-compiler-plugin情况compile下compile,maven-surefire-plugin在应用默认 ( ) 包装。
(注意模式:我提到了一个插件、一个目标、一个阶段,即默认绑定)。testtestmaven-jar-pluginjarpackagejar
这就是为什么最小的 pom已经可以做很多事情:同样,它是约定优于配置。
在定义打包类型时,我们是否可以说 pom.xml 插件部分填充了该打包构建生命周期的默认插件和目标?
事实上,这就像使用plugins默认附加插件和目标的执行来填充构建部分,并使用其默认配置分配给某些阶段。
另请注意,如果您添加同一插件和目标的进一步执行,它将在默认绑定指定的插件和目标之上(之后)调用。需要时请参阅下文如何预防它。
如果我们在插件部分定义一个插件,例如编译器插件,并为其提供配置,这些配置是否会覆盖插件的默认配置?
您可以定义更多插件及其executions一个或多个目标,附加到某一阶段。每个都execution可以有一个定制configuration。但是,configuration不在任何execution部分中但声明为通用/全局配置的 a 将应用于相关插件的任何执行,因此也应用于默认通过打包绑定附加的插件。
来自元素的官方POM 参考configuration
configuration默认行为是根据元素名称合并元素的内容。如果子 POM 具有特定元素,则该值将成为有效值。如果子 POM 没有元素,但父 POM 有,则父值将成为有效值。
关于节configuration的元素execution:
configuration:与上面相同,但将配置限制为这个特定的目标列表,而不是插件下的所有目标。
这就是为什么您经常看到不同的source/target配置maven-compiler-plugin,但没有任何execution. 它将应用于已通过默认绑定附加的compile(源代码编译)和(测试代码编译)目标的默认执行。testCompile
此外,您甚至可以覆盖默认绑定,并通过添加execution相同插件、相同目标、相同执行 id(最重要的一点)并将其附加到不同阶段或不存在的阶段(或空)阶段。因此,您将禁用默认插件目标执行。您还可以使用此技巧将插件目标执行添加为同一阶段的首次执行:通过禁用默认执行,添加您的执行,然后重新定义默认执行(然后使用不同的 id)。然后 Maven 将遵循执行声明顺序。
检查此 SO 答案以了解如何生成执行 ID。这里重要的一点是,来自Maven 官方文档
通过指定 POM 打包的默认生命周期映射绑定到构建生命周期的每个 mojo 都将分配一个执行
default-goalNameID
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |