a) 为什么不把它们放在一起?当您使用 maven 运行 ant 时,无论如何都不能调用单个目标,而是将 ant run 绑定到 maven 阶段。因此,您可以在 clean 阶段执行以下操作:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>clean</phase>
<configuration>
<tasks>
<delete file="${dir.dist}/${api.jarfile}" />
<delete dir="${dir.build}/**" />
<mkdir dir="${dir.build}" />
<mkdir dir="${dir.generated.code.junit}/build" />
<mkdir dir="${dir.dist}" />
<mkdir dir="${dir.deploy}" />
<mkdir dir="${dir.dist}" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
如果您需要在其他阶段进行更多工作,请添加更多执行:
</execution> <!-- end tag from above -->
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<!-- some more ant tasks -->
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
b) 如果你使用 maven,你应该像 maven 一样思考。您在 ant 任务中所做的很多事情都是默认的 maven 行为。
在 clean 阶段,执行clean:clean目标,删除目标目录(以及随之而来的 jar)。如果你把你正在使用的所有目录放在目标下面(这在 maven 中被认为是很好的做法),maven 将自动删除它们(并创建它们)。
Maven 是关于约定的:
- 生成的任何东西都进入目标
- 主要工件的类和资源进入目标/类
- 用于测试的类和资源进入目标/测试类
- 生成的资源进入 target/generated-resources/yourfoldername
- 生成的源进入 target/generated-sources/yourfoldername
所有主要插件都希望您遵循这些约定(根据它们有默认值),并且使用它们将使 maven 的生活变得更加轻松。
例如mvn clean
,将确保您删除生成的所有内容。有一些例外,插件必须将数据存储在不同的位置,因此无法被 clean:clean 拾取。这些插件通常提供替代的 clean mojos(eclipse:clean和idea:clean是示例),但尽量不要创建更多异常。
此外,根据 maven 约定,不应该在 Phase clean 中创建任何内容。有很多阶段可以生成东西,比如generate-resources
, generate-sources
, generate-test-resources
, generate-test-sources
。另外:创建文件夹通常是不必要的,我知道的所有 maven 插件在编写文件时都会根据需要创建文件夹。