首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迫使maven在站点生命周期之前运行构建生命周期?

如何迫使maven在站点生命周期之前运行构建生命周期?
EN

Stack Overflow用户
提问于 2016-11-21 18:22:12
回答 1查看 1.6K关注 0票数 1

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

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

问题/情景:

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

代码语言:javascript
复制
pSuccess
|-pSuccessClient
|-pSuccessEJB (has pSuccessClient as dependency)
|-pSuccessEAR (has pSuccessEJB as dependency)

代码语言:javascript
复制
pFail
|-pFailClient
|-pFailEJB (has pFailClient as dependency)
|-pFailEAR (has pFailEJB as dependency)

这两个项目都在我们的中心nexus伪存储库中有快照和发行版的发行存储库,但是它们都没有被部署到其中,这意味着连接是空的。

当我在mvn clean package site上运行pSuccess-project时,目标目录被删除(干净-生命周期),然后模块全部构建(构建-生命周期),最后在新建模块上正确生成报告(站点-生命周期)--构建成功!在“调试”过程中,我发现在构建生命周期期间,所需的clientDependency被放置在lokal存储库中,然后用于EJB,EAR模块的EJB也是如此。按预期顺利工作。

但是,当我在pFail上做同样的事情时,maven在干净的生命周期之后执行站点生命周期,在之前执行,然后执行构建生命周期。正如您所预期的,这会导致构建失败,因为maven无法找到EJB所需的依赖项(客户端)。这是非常本地化的,因为它还没有建立。每次运行命令时,我都可以强制执行这个结果。构建生命周期没有运行阶段--没有编译,只是什么都没有。Maven试图首先执行站点生命周期。只有当我运行一个mvn clean deploy,然后运行另一个mvn clean package site时,构建才是成功的,因为然后从附件读取伪文件。但是,站点生命周期是在构建生命周期之前执行的。Note只通过mvn clean package构建项目,运行良好,没有任何问题。所有模块都按照正确的顺序构建。但是当我添加site生命周期时,它就失败了。

我读过关于生命周期的maven文档,但我不明白为什么site会在build之前运行。在这里的一些问题中,我读到插件(应该在同一阶段执行)是按照pom.xml中列出的顺序执行的。所以我也检查过了,但是<build>标记是在<reporting>标记之前定义的。

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

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

编辑

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

对于那些不相信执行顺序的人:这是我运行mvn clean install site时的输出,显示站点生命周期是在构建生命周期之前执行的。我运行mvn clean package sitemvn clean install site并不重要。同样,运行单个mvn clean package(或安装)可以正常工作,但当我也想生成站点时就不行了。然后首先执行站点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 07:20:12

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

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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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之后,站点生成工作正常

代码语言:javascript
复制
  <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>

我仍然不太明白为什么要校对,但至少我的项目是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40726898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档