如果某个文件已经存在,如何禁用Ant Run?

4

当某个文件已经存在时,我该如何禁用maven-antrun-plugin的执行?

[...]
<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.6</version>
  <executions>
    <execution>
      <phase>test</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <!-- do something really complex in order to create file.txt -->
        </target>
      </configuration>
    </execution>
  </executions>
</build>
[...]

执行需要一些时间,我不想在file.txt已经存在时每次都重复执行。
2个回答

7

在你的独立Ant文件中检查文件是否存在。例如:

<target name="check-file">
    <available file="foo.bar" property="fileExists" />
</target>

<target name="time-consuming" depends="check-file" unless="fileExists">
    ...
</target>

请问您能否在这里提供一个简短的示例?我尝试了这里建议的方法(https://dev59.com/F0XRa4cB1Zd3GeqPqk4t),但无法在Maven中使其正常工作。 - yegor256
2
@yegor256 没错,但我假设您使用外部的Ant文件,并且您的POM调用“耗时”的目标。 - Laurent Pireyn

2

使用仅在 file.txt 不存在时才激活的 <profile>

<profiles>
    <profile>
        <id>createFile</id>
        <activation><file><missing>file.txt</missing></file></activation>
        <build><plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <!-- etc -->
            </plugin>

        </plugins></build>
    </profile>
</profiles>

参考:


有一个问题。当我运行 mvn clean test 时,在 POM 初始化期间文件存在,但在 clean 阶段后被删除。因此,antrun 执行未启动,而这是必需的... 有什么想法吗? - yegor256
@yegor 抱歉,这就是它的工作方式。在启动构建之前,会对配置文件进行评估,并且在目标之间不会重新评估。 - Sean Patrick Floyd
@SeanPatrickFloyd所以在实际配置文件存在检查之前,您无法运行ant任务?我正在使用antrun创建一个文件,然后检查它是否存在于配置文件中。但是,正如您所说的那样,在执行clean或install之前进行检查,因此配置文件会在下一次运行时进行评估。 - mjs
@momo 我认为在启动构建生命周期之前就会评估配置文件,因此我怀疑您将无法在触发特定配置文件的构建生命周期内执行任何操作。Maven不是那种类型的工具。如果您想要一种命令式的构建工具,请使用ant或gradle。Maven是声明性的,试图绕过它通常会导致恐惧、愤怒和痛苦。 - Sean Patrick Floyd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接