6 java spring maven spring-boot
我正在学习 Maven 构建过程,并且有一个争论点突出,因为没有多大意义。
我理解 Maven 的方式是,有默认的生命周期(default、site、clean),每个生命周期都有多个阶段。有一些与几个阶段相关的内置插件,通过添加其他插件,您可以向预先存在的阶段添加额外的功能。
当您指定直接在 Maven 中运行的阶段时,它将在同一生命周期内经历到目前为止的所有阶段,并以执行您指定的阶段结束。然而,据我所知,spring-boot:run这是一个目标,因此在运行时不应调用其他阶段。话虽这么说,spring-boot:run通过 maven 运行确实会运行其他阶段(default-cli、pre-unit-test、default-resources、reserve-container-port和其他一些阶段)。在我看来,spring 创建了一些新的阶段(reserve-container-port例如),但我不确定如何找到这些配置所在的 jar 文件。
因此我的问题是双重的:
spring-boot:run我理解的目标吗?如果是这样,运行这个目标又如何运行其他阶段?据我所知,只有指定一个阶段作为目标才会按顺序运行前面的其他阶段,而不是直接指定目标。spring-boot:run 是我理解的目标吗
事实上,spring-boot是一个maven插件,run也是它的目标之一。
这是这个插件的官方文档。
在该文档中,我没有找到执行此目标的默认 Maven 阶段。但从 GitHub源代码中,我发现这个目标是阶段性执行的TEST_COMPILE。
仅指定一个阶段作为目标将按顺序运行前面的其他阶段,而不是直接指定目标。
事实上,maven就是这样工作的。这里介绍一下maven生命周期。
所有这些的配置文件位于哪里?
它在你的 spring-boot pom 父级中定义:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot-starter-parent.version}</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
小智 5
由于另一个答案遗漏了我正在寻找的一些信息,我想我应该添加我的研究结果,以防其他人好奇。寻找
C:\HOME_DIR.m2\repository\org\springframework\boot\spring-boot-maven-plugin\VERSION_NUMBER\META-INF\maven\plugin.xml
给出了 spring 与 maven 的大多数相关目标的配置文件。具体来说,下面的代码片段描述了spring-boot:run目标如何运作。
<mojo>
<goal>run</goal>
<description>Run an executable archive application.</description>
<requiresDependencyResolution>test</requiresDependencyResolution>
<requiresDirectInvocation>false</requiresDirectInvocation>
<requiresProject>true</requiresProject>
<requiresReports>false</requiresReports>
<aggregator>false</aggregator>
<requiresOnline>false</requiresOnline>
<inheritedByDefault>true</inheritedByDefault>
<phase>validate</phase>
<executePhase>test-compile</executePhase>
<implementation>org.springframework.boot.maven.RunMojo</implementation>
<language>java</language>
<instantiationStrategy>per-lookup</instantiationStrategy>
<executionStrategy>once-per-session</executionStrategy>
<since>1.0.0</since>
<threadSafe>false</threadSafe>
...
</mojo>
Run Code Online (Sandbox Code Playgroud)
具体来说,<executePhase>标签(部分详细信息请参见https://maven.apache.org/developers/mojo-api-specification.html),(我相信)它让这个目标在运行时执行不同的阶段。
我之前错过了这个细节(它似乎也没有在任何地方得到很好的记录)。不管怎样,这个解释对我来说已经足够令人满意了。如果有人找到此标签的更好文档,我将不胜感激一个链接:)
| 归档时间: |
|
| 查看次数: |
12089 次 |
| 最近记录: |