Maven目标和阶段之间的区别/关系是什么?它们之间有什么关系?
当前回答
选择的答案很好,但我仍然想为这个话题补充一些小的东西。一个例证。
它清楚地展示了不同的阶段如何绑定到不同的插件以及这些插件暴露的目标。
所以,让我们检查一个运行类似mvn compile的例子:
这是一个执行编译器插件的阶段 编译的目标 编译器插件有不同的目标。对于mvn编译,它被映射到一个特定的目标,编译目标。 这与运行mvn编译器:compile相同
因此,阶段是由插件目标组成的。
链接到参考资料
其他回答
选择的答案很好,但我仍然想为这个话题补充一些小的东西。一个例证。
它清楚地展示了不同的阶段如何绑定到不同的插件以及这些插件暴露的目标。
所以,让我们检查一个运行类似mvn compile的例子:
这是一个执行编译器插件的阶段 编译的目标 编译器插件有不同的目标。对于mvn编译,它被映射到一个特定的目标,编译目标。 这与运行mvn编译器:compile相同
因此,阶段是由插件目标组成的。
链接到参考资料
目标是分阶段执行的,这有助于确定目标执行的顺序。最好的理解方法是查看默认的Maven生命周期绑定,该绑定显示默认情况下哪个目标在哪个阶段运行。编译阶段目标总是在测试阶段目标之前执行,测试阶段目标总是在包阶段目标之前执行,以此类推。
执行Maven时可以指定目标或阶段,这在一定程度上加剧了这种混乱。如果您指定了一个阶段,那么Maven将运行所有阶段,直到您指定的阶段(例如,如果您指定了包,它将首先运行编译阶段,然后是测试阶段,最后是包阶段),并且对于每个阶段,它将运行与该阶段相关的所有目标。
当您在Maven构建文件中创建插件执行时,如果您只指定了目标,那么它就会将该目标绑定到给定的默认阶段。例如,jaxb:xjc目标默认绑定到生成资源阶段。但是,当您指定执行时,您还可以显式地指定该目标的阶段。
如果您在执行Maven时指定了一个目标,那么它将运行该目标,且仅运行该目标。换句话说,如果您指定了jar:jar目标,它将只运行jar:jar目标来将您的代码打包到一个jar中。如果您之前没有运行编译目标或以其他方式准备编译后的代码,则很可能会失败。
归功于Sandeep Jindal和Premraj。我一时糊涂,他们的解释让我明白了。
我在这里创建了一些完整的代码示例和一些简单的解释https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/。我想这可以帮助别人理解。
简而言之,你不应该试图一次理解所有这三个组,首先你应该理解这三个组之间的关系:
生命周期vs阶段 插件vs目标
1. 生命周期vs阶段
生命周期是按顺序的阶段的集合,请参阅这里的生命周期参考。当你调用一个相位时,它也会调用它之前的所有相位。
例如,清洁生命周期有3个阶段(清洁前、清洁后)。
mvn clean
它会调用pre-clean和clean。
2. 插件vs目标
目标就像Plugin中的一个动作。如果plugin是一个类,goal是一个方法。
你可以这样称呼一个进球:
mvn clean:clean
这意味着“在清洁插件中调用清洁目标”(这里与清洁阶段无关。不要让“干净”这个词混淆了你,它们不是一样的!)
3.现在,阶段和目标之间的关系:
阶段可以(预)链接到目标。例如,通常,清洁阶段与清洁目标相关联。所以,当你调用这个命令时:
mvn clean
它将调用预清洁阶段和清洁阶段,后者与清洁目标相关联。
它几乎等同于:
mvn pre-clean clean:clean
更多细节和完整的例子见https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
具有阶段和目标的Maven工作术语。
阶段:Maven阶段是一组与2或3个目标相关的行动
示例:-如果您运行MVN清洁
这是MVN阶段要执行的清洁目标:清洁
目标:与阶段有界限的Maven目标
供参考 http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
有以下三个内置的构建生命周期:
默认的 清洁 网站
生命周期默认值->[验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源、生成测试资源、流程测试资源、测试编译、流程测试类、测试、准备包、包、预集成测试、集成测试、后集成测试、验证、安装、部署]
生命周期清洁->[预清洁,清洁,后清洁]
生命周期站点->[站点前,站点,站点后,站点部署]
流是顺序的,例如,对于默认的生命周期,它从验证开始,然后初始化等等…
您可以通过启用mvn的调试模式来检查生命周期,即mvn -X <your_goal>
推荐文章
- 如何在POM.xml中引用环境变量?
- Maven project.build.directory
- Spring Boot -父pom,当你已经有一个父pom
- 使用Maven复制文件的最佳实践
- Maven命令行如何指向特定的settings.xml为单个命令?
- Maven依赖项失败,出现501错误
- 禁用maven下载进度指示
- Maven surefire找不到ForkedBooter类
- 在IntelliJ IDEA中导入Maven依赖项
- Java编译器级别与安装的Java项目facet的版本不匹配
- 在pom.xml中的<依赖>下的<作用域>是为了什么?
- “react-scripts”不被视为内部或外部命令
- Maven项目版本继承——我必须指定父版本吗?
- Maven——总是下载源代码和javadocs
- “mvn清洁安装”与“mvn安装”有什么不同?