我一直在寻找从顶级宏生成 ANT 目标的可能性。
细节:
我们有异构的构建系统。ANT+IVY 用作顶层(继承的solutin,不能更改)。一些项目是通过 MSBuild 构建的,通过 exec 任务从 ANT 调用。对于这些项目中的每一个,至少有两个不同的 msbuild 调用(为简洁起见用宏包装),一个在“build”目标中,一个在“clean”中。其中两个仅通过“目标”参数不同。所以我在猜测,如果有这样的可能性:
扩展节点:
<extensionpoint name="build-ext-point" />
<extensionpoint name="clean-ext-point" />
<target name="build" depends="build-ext-point" />
<target name="clean" depends="clean-ext-point" />
我的魔法宏:
<macrodef name="msbuild-proj" />
<attribute name="project" />
<sequential>
<target name="@{project}-build" >
<msbuild project="@{project}" target="Build" />
</target>
<target name="@{project}-clean" >
<msbuild project="@{project}" target="Clean" />
</target>
</sequential>
</macrodef>
如何使用:
<msbuild-proj project="CPP-proj" />
谢谢!
PS:是的,我知道我可以定义那些构建和清理覆盖,或者通过 ext 点,或其他任何方式。问题实际上是我是否可以删除一些代码重复。
UPD:我会自己回答这个问题。在这一点上,没有这种可能性。主要是因为 Target 类是一个任务容器,而不是一个任务。因此,它不能放入容器中。所以我想我会写一些可扩展的任务。