【问题标题】:spring-boot maven plugin re runs compile & test phasespring-boot maven 插件重新运行编译和测试阶段
【发布时间】:2014-07-11 09:51:24
【问题描述】:

同时使用 spring-boot-maven-plugin run 和 repackage 目标会导致我的编译和测试阶段重新运行,例如

mvn clean package spring-boot:run

你会看到两个编译和测试运行...

在maven调试输出中我可以看到

...
[DEBUG] Goal:          org.springframework.boot:spring-boot-maven-plugin:1.0.2.RELEASE:repackage (default)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <finalName default-value="${project.build.finalName}"/>
  <outputDirectory default-value="${project.build.directory}"/>
  <project default-value="${project}"/>
</configuration>
[DEBUG] --- init fork of myapp:1.0-SNAPSHOT for     org.springframework.boot:spring-boot-maven-plugin:1.0.2.RELEASE:run (default-cli) ---
[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): [compile, test]
[DEBUG] -----------------------------------------------------------------------

看看插件源代码类,我看到的是 RunMojo 和 RepackageMojo

@Mojo(name = "run", requiresProject = true, defaultPhase = LifecyclePhase.VALIDATE, requiresDependencyResolution = ResolutionScope.TEST)
@Execute(phase = LifecyclePhase.TEST_COMPILE)
public class RunMojo extends AbstractMojo {

认为@Execute 与它有关?

谢谢

【问题讨论】:

    标签: maven-plugin spring-boot


    【解决方案1】:

    是的。为什么不直接使用“mvn spring-boot:run”?据我所知,这就是 Maven 的工作方式。

    【讨论】:

    • 一个更好的例子是 repackage 目标,默认情况下它附加到 maven 验证阶段(它本身确保前面的阶段编译、打包等已经完成)。因此,如果您运行“mvn clean install”,您将获得阶段 clean > compile > test > package > verify > 然后 spring-boot:repackage 开始 > compile > test > install...
    • 这是同一个故事 - 你必须将 Maven 目标与特定的生命周期阶段联系起来。通常,您不会将 spring-boot:repackage 作为独立目标运行,而是将其绑定到 pom 中的“包”生命周期(starter-parent 为您执行此操作),然后它不需要重新执行早期的目标。
    【解决方案2】:

    我的错...实际上是 cobertura 插件这样做是可以理解的,因为它需要重新编译源代码以对其进行覆盖。

    【讨论】:

      猜你喜欢
      • 2014-11-14
      • 2019-04-09
      • 2011-06-03
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多