Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 当我触发构建映像目标时,SpringBootMaven插件再次运行完整构建周期的原因是什么?_Spring Boot_Maven_Spring Boot Maven Plugin - Fatal编程技术网

Spring boot 当我触发构建映像目标时,SpringBootMaven插件再次运行完整构建周期的原因是什么?

Spring boot 当我触发构建映像目标时,SpringBootMaven插件再次运行完整构建周期的原因是什么?,spring-boot,maven,spring-boot-maven-plugin,Spring Boot,Maven,Spring Boot Maven Plugin,我们注意到,当我们将构建映像目标作为maven生命周期的一部分运行时,整个生命周期运行两次(编译、测试编译、报告等)。这对于大多数插件来说都不是问题,因为它们会检测到这种行为,并且不会再次运行。然而,我们有一些报告插件,由于这种行为会生成不正确的报告 有没有办法禁用它?为什么会这样 编辑: 有一个非常基本的例子。大部分生命周期运行两次的原因是因为Spring Boot Maven插件中的“构建映像”目标需要。 在日志中,您可以看到Maven在fork中执行此阶段: [INFO]>>>spring

我们注意到,当我们将构建映像目标作为maven生命周期的一部分运行时,整个生命周期运行两次(编译、测试编译、报告等)。这对于大多数插件来说都不是问题,因为它们会检测到这种行为,并且不会再次运行。然而,我们有一些报告插件,由于这种行为会生成不正确的报告

有没有办法禁用它?为什么会这样

编辑:
有一个非常基本的例子。

大部分生命周期运行两次的原因是因为Spring Boot Maven插件中的“构建映像”目标需要。 在日志中,您可以看到Maven在fork中执行此阶段:
[INFO]>>>spring boot maven插件:2.3.0.版本:构建映像(默认cli)>package@spring boot maven test>>

据我所知,Maven并没有一个系统,当它已经在同一个构建中运行时(当使用此注释时),可以跳过再次运行该阶段

要避免这种情况,您可以不在常规Maven生命周期中绑定构建映像目标,而是直接调用它:
mvn spring boot:build image
。 结果将是插件触发包阶段,然后构建docker映像

如果您需要将报告插件添加到构建中,您可以将其添加到包生命周期中(该生命周期也将作为构建映像的先决条件进行构建),或者您可以在之后调用单独的mvn命令(您可以跳过/包括具有概要文件的某些插件)



更新:已经提交了一份PR来修复Maven中的问题,请点击此处指向GitHub的链接:

我知道明确触发目标可以解决问题,但在我们的情况下,我们希望将构建映像目标作为正常生命周期的一部分。因为它只是一个从您的源代码生成工件的目标,所以我不明白为什么它必须分叉生命周期。必须触发多个命令并创建特定的配置文件才能阻止这种情况的发生,对于这样一件小事来说,这似乎是很多配置。不幸的是,Maven没有什么东西可以检测,也没有分叉运行,但我最近了解到这是需要的().另一件不幸的事是,Spring插件开发人员当然不打算将此目标包括在常规生命周期中,但他们这样做是可以理解的。我已经验证了分支构建,它确实解决了问题。干得好!