如果maven pom.xml中没有定义打包类型,则使用jar生命周期。
几乎正确,jar
不是生命周期,而是包装。 Maven 有three 构建生命周期 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html(干净、默认、站点)可应用于任何包装。
据官方介绍Maven模型 https://maven.apache.org/ref/3.2.5/maven-model/maven.html
packaging
该项目生成的工件类型,例如 jar war Ear pom。插件可以创建自己的包装,因此也可以创建自己的包装类型,因此此列表不包含所有可能的类型。
默认值为: jar
.
每个 Maven 打包类型都有一个默认的构建生命周期
它没有默认的生命周期,您可以在其项目上调用默认的生命周期。它有默认绑定 https://maven.apache.org/ref/3.3.9/maven-core/default-bindings.html对于默认生命周期,即插件已经根据定义默认附加到默认生命周期的各个阶段packaging
type.
中的一个核心概念 https://maven.apache.org/background/philosophy-of-maven.htmlMaven 是约定优于配置。它的默认绑定强制执行这一原则,已经为给定的包提供了某些插件的某些目标的执行。
例如,默认情况下已经需要编译(通过maven-compiler-plugin
和它的compile
期间的目标compile
阶段),测试(通过maven-surefire-plugin
和它的test
期间的目标test
阶段)和包(通过maven-jar-plugin
和它的jar
期间的目标package
阶段)应用默认值时的项目(jar
) 包装。
(注意模式:我提到了一个插件、一个目标、一个阶段,即默认绑定)。
这就是为什么最小的 pom https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM已经可以做很多事情了:同样,它是约定优于配置。
在定义打包类型时,我们是否可以说 pom.xml 插件部分填充了该打包构建生命周期的默认插件和目标?
事实上,这就像填充构建plugins
使用默认配置执行默认附加插件和目标并分配给某些阶段的部分。
另请注意,如果您添加同一插件和目标的进一步执行,它将在默认绑定指定的插件和目标之上(之后)调用。需要时请参阅下文如何预防它。
如果我们在插件部分定义一个插件,例如编译器插件,
并为其提供配置,这些配置是否会覆盖插件默认配置?
您可以定义更多插件和executions
他们的一个或多个目标,附加到某个阶段。每个execution
可以定制configuration
。然而,一个configuration
不属于任何execution
但声明为通用/全局配置的部分将应用于任何执行相关插件的名称以及默认通过打包绑定附加的插件的名称。
来自官方POM参考 https://maven.apache.org/pom.html#Plugins on the configuration
element
默认行为是合并内容configuration
根据元素名称的元素。如果子 POM 具有特定元素,则该值将成为有效值。如果子 POM 没有元素,但父 POM 有,则父值将成为有效值。
并关于configuration
的元素execution
部分:
configuration
:与上面相同,但将配置限制为特定的目标列表,而不是插件下的所有目标。
这就是为什么你经常会看到不同的source
/target
配置为maven-compiler-plugin
,没有任何execution
。它将应用于默认执行compile
(源代码编译)和testCompile
(测试代码编译)目标已通过默认绑定附加。
此外,您甚至可以覆盖默认绑定,并通过添加execution
对于相同的插件,相同的目标,相同的执行ID(最重要的一点)并将其附加到不同的阶段或不存在的阶段(或空)阶段。因此,您将禁用默认插件目标执行。您还可以使用此技巧将插件目标执行添加为同一阶段的首次执行:通过禁用默认执行,添加您的执行,然后重新定义默认执行(然后使用不同的 id)。然后 Maven 将遵循执行声明顺序。
Check 这个答案 https://stackoverflow.com/a/34599117/5606016关于如何生成执行 ID。这里重要的一点是,从官方 Maven 文档 https://maven.apache.org/guides/mini/guide-default-execution-ids.html
通过指定 POM 打包的默认生命周期映射绑定到构建生命周期的每个 mojo 将具有一个执行 IDdefault-goalName
分配给它