我正在将ant转换为maven2。 在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中是否有任何东西使一个任务依赖于另一个任务?
答案 0 :(得分:1)
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生活变得更加轻松。
E.g。 mvn clean
将确保您删除生成的所有内容。
有一些例外,插件必须在不同的地方存储数据,因此无法通过clean:clean来获取。这些插件通常提供备用的干净mojos(eclipse:clean和idea:clean是示例),但尽量不要创建更多例外。
另外,根据maven惯例,在相位清理中不应创建任何内容。生成内容有很多阶段,例如generate-resources
,generate-sources
,generate-test-resources
,generate-test-sources
。另外:创建文件夹通常是不必要的,我知道所有maven插件在编写文件时根据需要创建文件夹。