花了几个小时试图找出问题后,我得出结论,我需要知道:
如何强制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命令。
修改
我知道生命周期和阶段,这意味着我知道package
,install
,deploy
之间的区别是什么 - 这不是问题的一部分!< / p>
对于那些不相信执行顺序的人:这是我运行mvn clean install site
时的输出,表明在构建生命周期之前执行了网站生命周期。如果我运行mvn clean package site
或mvn clean install site
并不重要。再次,运行单mvn clean package
(或安装)工作正常,但不是我想生成网站时。然后首先执行网站。
答案 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>
我仍然不明白为什么会合并但至少我的项目正在运作。