我正在将蚂蚁转换为maven。在build.xml中,我有:
<target name="clean">
<delete file="${dir.dist}/${api.jarfile}" />
<delete dir="${dir.build}/**" />
</target>
<target name="prepare1" depends="clean">
<mkdir dir="${dir.build}" />
<mkdir dir="${dir.generated.code.junit}/build" />
<mkdir dir="${dir.dist}" />
</target>
<target name="prepare2" depends="clean">
<mkdir dir="${dir.deploy}" />
<mkdir dir="${dir.dist}" />
</target>
我正在使用maven-antrun-plugin,它与第一个目标一起工作正常。但是,对于第二个目标,antrun不支持“依赖”。我可以这样做:将第一个目标置于清洁阶段,将第二个目标置于后清洁阶段。所以第二个目标将在第一个目标之后运行。但是对于第3个目标,这个技巧将不起作用,因为第3个目标应该仅在第1个目标之后运行(我不想在第3个目标时运行第2个目标)。
无论如何,这个技巧将无法工作,因为我的build.xml是一个包含许多目标的大文件,它们之间的关系很复杂。
无论如何可以解决这个问题吗?在maven中是否有任何东西使一个任务依赖于另一个任务?
a)为什么不把它们放在一起?当您使用maven运行ant时,无论如何都无法调用单个目标,您正在将ant运行绑定到maven阶段。因此,您可以在清洁阶段执行以下操作:
<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目标,删除目标目录(和jar一起)。如果你把你正在使用的所有目标放在目标下面(这在maven中被认为是好习惯),maven会自动删除它们(并创建它们)。
Maven是关于惯例的:
所有主要插件都希望您遵循这些约定(它们具有默认值)并使用它们将使maven生活变得更加容易。
例如。 mvn clean
将确保您删除生成的所有内容。有一些例外,插件必须在不同的地方存储数据,因此无法通过clean:clean来获取。这些插件通常提供替代的清洁mojos(eclipse:clean和idea:clean是示例),但尽量不要创建更多的例外。
此外,根据maven惯例,在相位清洁中不应创建任何内容。生成的东西有很多阶段,比如generate-resources
,generate-sources
,generate-test-resources
,generate-test-sources
。另外:创建文件夹通常是不必要的,我知道所有maven插件在编写文件时根据需要创建文件夹。