gpt4 book ai didi

maven - 如何仅在结果输出尚不存在时运行 Maven 插件执行

转载 作者:行者123 更新时间:2023-12-01 16:08:52 25 4
gpt4 key购买 nike

我继承了一个 POM,它试图通过使用配置文件来避免重复构建步骤仅当步骤输出不存在时才会激活:

<profile>
<id>run-once</id>
<activation>
<file>
<missing>target/some-output</missing>
</file>
</activation>
<build>
<plugins>
<plugin>
...
<executions>
<execution>
... slow process to produce target/some-output ...
</execution>
</executions>
</plugin>
</plugins>
</build>
</activation>

然而,正如 maven 专家无疑立即意识到的那样,如果开发人员说 mvn clean install,这将不起作用。 Maven 在运行 clean 之前计算一次事件配置文件,如果存在 target/some-output,则 run-once 配置文件不存在积极的。结果是 target/some-output 被清除阶段删除但没有在 install 阶段重新创建,随后的 WAR 被破坏,因为 some-缺少输出

这个问题是否有标准的解决方案(除了避免mvn clean install)?我打算让插件成为无条件的,以防止静默创建损坏的 WAR。

更一般地说,是否有一种标准技术可以防止 mvn 重新创建像 some-output 这样的最新 Artifact ?或者如果 make 风格的依赖管理很重要,那么应该使用 gradle 或 rake 而不是 maven 的想法是什么?

最佳答案

我认为这个问题没有标准的解决方案。尽管我可以想到多种选择(很可能还有其他选择):

  • 您显然可以手动激活配置文件:mvn clean install -Prun-once,但是当然您必须记住每次都这样做
  • 配置maven-enforcer-plugin连同它的requireFilesExist规则以确保文件存在,如果不存在则构建失败。 (至少这样你就不会静默地创建一个失败的 WAR)
  • 修改配置文件,让它创建文件到您的 src 文件夹下的某个位置(即 src/main/gen),该位置被排除在您的源代码之外存储库(如果您正在使用一个),然后配置 maven-resources-plugin及其 copy-resources目标是将这些资源复制到构建目录下的正确位置。这样就不会删除它们。

关于maven - 如何仅在结果输出尚不存在时运行 Maven 插件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369232/

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