在花了几个小时试图找出问题所在之后,我得出了我需要知道的结论:
如何强制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伪存储库中有快照和发行版的发行存储库,但是它们都没有被部署到其中,这意味着连接是空的。
当我在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命令。
编辑
我知道生命周期和阶段,这意味着我知道package,install,deploy之间的区别--这不是问题的一部分!
对于那些不相信执行顺序的人:这是我运行mvn clean install site时的输出,显示站点生命周期是在构建生命周期之前执行的。我运行mvn clean package site或mvn clean install site并不重要。同样,运行单个mvn clean package(或安装)可以正常工作,但当我也想生成站点时就不行了。然后首先执行站点。

发布于 2016-11-24 07:20:12
在挖掘了几个小时之后,我找到了解决问题的方法:
两个项目都在报告期间使用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>我仍然不太明白为什么要校对,但至少我的项目是有效的。
https://stackoverflow.com/questions/40726898
复制相似问题