Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用宏生成Ant任务_Ant_Target_Macrodef - Fatal编程技术网

使用宏生成Ant任务

使用宏生成Ant任务,ant,target,macrodef,Ant,Target,Macrodef,我一直在寻找从顶级宏生成ANT目标的可能性 详情: 我们有异基因构建系统。ANT+IVY用作顶层(继承的solutin,不能更改)。有些项目是通过MSBuild构建的,通过exec任务从ANT调用。对于这些项目中的每一个,至少有两个对msbuild的不同调用(为了简洁起见,用宏包装),一个在“build”目标中,一个在“clean”中。其中两个仅在“目标”参数上不同。所以我在猜测,如果有这样的可能性: 扩展节点: <extensionpoint name="build-ext-point"

我一直在寻找从顶级宏生成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" />

谢谢

附言:是的,我知道我可以定义那些被覆盖的构建和清理,或者通过extpoint,或者其他什么。问题实际上是我是否可以删除一些代码重复


UPD:我会自己回答这个问题。在这一点上,没有这种可能性。主要是因为目标类是任务容器,而不是任务。因此,不能将其放入容器中。所以我想我会写一些可扩展的任务。

ANT有两种机制来构建模块化构建

首先,我认为您的主要问题是如何为您的构建构建“扩展点”?以下ANT任务旨在从另一个生成文件导入通用生成逻辑:

既然您已经计划使用macrodefs扩展构建,我建议将它们打包为可重用的组件。可以在您的项目中使用,但它实际上被设计为打包在另一个构建可以获取的JAR文件中,例如,通过将其安装在标准ANT lib目录中:

  • $antu HOME/lib
  • $HOME/.ant/lib
最后,如果您已经在使用ivy,并且将TaskDef打包为ANT libs,那么您可以通过将其安装在Maven存储库管理器中来对构建逻辑进行版本化,如。这解决了大型ANT构建的关键问题之一。随着时间的推移,它们变得如此庞大,在不影响较旧版本的情况下,不可能更改公共逻辑(这表明这些版本没有正确地相互隔离)。

实际上是这样做的。 尽管存在一些警告,但它确实起到了作用。
对于那些感兴趣的人:

那个URI似乎不适合我。如果你还在,你能提供一个新的指针吗?(我正在尝试设置两个宏,结果成功了。不幸的是,我收到的投诉无法以工会的孩子的身份出现,工会希望围绕其扩张展开……这不是我对现代宏扩展器的期望。