gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:02:15 24 4
gpt4 key购买 nike

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

如何强制 Maven 按照以下顺序执行生命周期阶段 clean、build 和 site: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 -project 目标目录被删除(clean-lifecycle),然后模块全部构建(build-lifecycle),最后在新构建的模块上正确生成报告(site-lifecycle) - 构建成功!在“调试”该过程时,我发现在构建生命周期期间,所需的 clientDependency 被放置在 lokal maven 存储库中,然后用于 EJB,与 EAR 模块的 EJB 相同。工作顺利,符合预期。

但是当我在pFail上做同样的事情时-project maven 在 clean-lifecycle 之后、build-lifecycle之前执行 site-lifecycle。正如您所料,这会导致构建失败,因为 Maven 无法找到 EJB 所需的依赖项(客户端)。这是非常本地化的,因为它还没有建立。每次运行命令时我都可以强制执行此结果。没有运行构建生命周期的任何阶段 - 没有编译,什么都没有。 Maven 尝试首先执行站点生命周期。仅当我运行 mvn clean deploy 时,构建才会成功然后另一个 mvn clean package site ,因为然后从连接中读取 Artifact 。但站点生命周期再次在构建生命周期之前执行。 注意 仅通过 mvn clean package 构建项目工作正常,没有任何问题。所有模块均按正确的顺序构建。但是当我添加 site生命周期失败。

我读了maven documentation about lifecycle但我不明白为什么 sitebuild之前运行。在关于 SO 的一些问题中,我读到应在同一阶段执行的插件是按照 pom.xml 中列出的顺序执行的。 。所以我也检查了,但是 <build>标签定义在 <reporting> 之前标签。

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

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

编辑

我了解生命周期和阶段,这意味着我知道 package 之间有什么区别, install , deploy是 - 这不是问题的一部分!

对于那些不相信执行顺序的人:这是我运行 mvn clean install site 时的输出,显示 site-lifecycle 在 build-lifecycle 之前执行。我运行mvn clean package site也没关系或mvn clean install site 。再次运行单mvn clean package (或安装)工作正常,但当我也想生成网站时就不行了。然后首先执行站点。

Build-failure

最佳答案

经过几个小时的研究,我找到了解决问题的方法:

两个项目在报告期间都使用 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 中,我们还在构建生命周期的 generate-sources 阶段使用 build-helper-maven-plugin

<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>

我仍然不太明白为什么它会发生冲突,但至少我的项目正在运行。

关于java - 如何强制 Maven 在站点生命周期之前运行构建生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40726898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com