如果生成的输出尚不存在,如何运行Maven插件执行

时间:2014-10-14 19:55:43

标签: maven

我继承了一个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?

1 个答案:

答案 0 :(得分:0)

我不认为这个问题有一个标准的解决方案。虽然我可以想到各种各样的选项(其他人也很可能):

  • 你显然可以手动激活配置文件:mvn clean install -Prun-once,但是你必须记住每次都这样做
  • 配置maven-enforcer-plugin及其requireFilesExist规则,以确保文件存在,如果不存在则无法构建。 (至少那时你不会得到一个破坏的WAR的无声创造)
  • 修改配置文件,让它将文件创建到src文件夹下的位置(即src/main/gen),该文件夹不会被检入您的源存储库(如果您使用的是),并且然后配置maven-resources-plugin及其copy-resources目标,将这些资源复制到构建目录下的正确位置。这样干净就不会删除它们。