我继承了一个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
阶段没有重新创建some-output
,因为mvn clean install
缺失而导致随后的WAR被破坏。
此问题是否有标准解决方案(除了避免some-output
)?我即将使插件无条件地阻止静默创建一个破坏的WAR。
更一般地说,是否有一种标准技术可以防止mvn重新创建最新的{{1}}等工件?或者是,如果make-style依赖管理很重要,那么应该使用gradle或rake而不是maven?
答案 0 :(得分:0)
我不认为这个问题有一个标准的解决方案。虽然我可以想到各种各样的选项(其他人也很可能):
mvn clean install -Prun-once
,但是你必须记住每次都这样做src
文件夹下的位置(即src/main/gen
),该文件夹不会被检入您的源存储库(如果您使用的是),并且然后配置maven-resources-plugin及其copy-resources目标,将这些资源复制到构建目录下的正确位置。这样干净就不会删除它们。