如何强制maven在站点生命周期之前运行构建生命周期?

时间:2016-11-21 18:22:12

标签: java maven lifecycle

花了几个小时试图找出问题后,我得出结论,我需要知道:

如何强制maven按照以下顺序执行生命周期阶段的清理,构建和网站:clean -> build -> site

问题/情景:

我必须使用相同模块的多模块项目:

pSuccess
|-pSuccessClient
|-pSuccessEJB (has pSuccessClient as dependency)
|-pSuccessEAR (has pSuccessEJB as dependency)

pFail
|-pFailClient
|-pFailEJB (has pFailClient as dependency)
|-pFailEAR (has pFailEJB as dependency)

这两个项目都在我们的中央nexus artefact存储库中有快照和发布的分发存储库,但它们都没有部署到它,这意味着nexus是空的。

当我在mvn clean package site - 项目上运行pSuccess时,目标目录被删除(清理生命周期),然后模块全部构建(构建生命周期),最后生成报告(站点) -lifecycle)正确地在新建模块上 - BUILD SUCCESS!而"调试"我发现在构建生命周期中,所需的clientDependency放在lokal maven存储库中,然后用于EJB,与EAR模块的EJB相同。按预期顺利进行。

但是当我在pFail上执行相同操作时,maven会在清理生命周期之后执行网站生命周期,而之前执行构建生命周期。正如您所料,这会导致构建失败,因为maven无法找到EJB所需的依赖项(Client)。这是非常局部的,因为它还没有建立。每次运行命令时,我都可以强制执行此结果。没有构建生命周期的阶段 - 没有编译,没有任何东西。 Maven首先尝试执行站点生命周期。当我运行mvn clean deploy然后运行另一个mvn clean package site时,构建才成功,因为然后从连接中读取人工制品。但是,在构建生命周期之前再次执行站点生命周期。 注意仅通过mvn clean package构建项目可以正常工作,没有任何问题。所有模块都以正确的顺序构建。但是当我添加site生命周期时,它失败了。

我阅读了maven documentation about lifecycle,但我无法弄清site之前运行build的原因。在SO的一些问题中,我读到了应该在同一阶段执行的插件,它们按pom.xml中列出的顺序执行。我也检查了这一点,但<build>标记在<reporting>标记之前定义。

那么为什么maven在我的一个项目中的构建生命周期之前执行站点生命周期?如何强制maven以正确的顺序执行生命周期:clean -> build -> site

P.S:我在Windows 7的命令行上运行所有maven命令。

修改

我知道生命周期和阶段,这意味着我知道packageinstalldeploy之间的区别是什么 - 这不是问题的一部分!< / p>

对于那些不相信执行顺序的人:这是我运行mvn clean install site时的输出,表明在构建生命周期之前执行了网站生命周期。如果我运行mvn clean package sitemvn clean install site并不重要。再次,运行单mvn clean package(或安装)工作正常,但不是我想生成网站时。然后首先执行网站。

Build-failure

1 个答案:

答案 0 :(得分:1)

经过几个小时的挖掘后,我找到了解决问题的方法:

两个项目都在报告期间使用maven-javadoc-plugin

<reporting>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>${maven.javadoc.version}</version>
    <!-- DocLint je nach Profil ausschalten (siehe oben) -->
    <configuration>
      <additionalparam>${javadoc.opts}</additionalparam>
    </configuration>
  </plugin>
...
</reporting>

在失败项目的EJB中,我们还在构建生命周期的build-helper-maven-plugin阶段使用generate-sources

<build>
  ...
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
      <execution>
        <id>add-source</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
    ....
  </plugin>
  ...
</build>

似乎两个插件在generate-sources阶段都会发生碰撞。

在对maven-javadoc-plugin进行操作以使用以下ReportSet后,网站生成工作正常

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>${maven.javadoc.version}</version>
    <!-- Disable DocLint correspondening to java version -->
    <configuration>
      <additionalparam>${javadoc.opts}</additionalparam>
    </configuration>
    <reportSets>
      <reportSet>
        <reports>
          <report>javadoc-no-fork</report>
          <report>test-javadoc-no-fork</report>
        </reports>
      </reportSet>
    </reportSets>        
  </plugin>

我仍然不明白为什么会合并但至少我的项目正在运作。