我有一个通用的common.xml文件,它包含许多在多个版本中重复使用的通用nant目标。我想要做的是“覆盖”其中一些非目标,并在执行现有目标之前或之后包含其他步骤。
是否首先使用当前文件中的nant目标?即。如果我在当前构建文件中创建一个nant目标,其名称与包含文件中的目标同名,那么是否会调用该目标并忽略包含的目标?如果是这种情况,我可以这样做并调用包含的目标,但这似乎是一个递归调用,而不是一个包含的任务。
思想?
答案 0 :(得分:3)
我有同样的问题(并发现相同的结果),但我也找到了解决方法。请允许我举例说明。
你有一个ProjectFile.build和一个CommonFile.build。假设您要覆盖名为“Clean”的目标。
您需要创建一个新文件(称为CommonFile_Clean.build),其中包含:
<?xml version="1.0"?>
<project>
<target name="Clean">
<echo message="Do clean stuff here" />
</target>
</project>
在CommonFile.build中,您有条件地包含CommonFile_Clean.build:
<?xml version="1.0"?>
<project>
<echo message="checking Clean definition..." />
<if test="${not target::exists('Clean')}">
<echo message="Clean target not defined." />
<include buildfile="CommonFile_Clean.build" />
</if>
</project>
在ProjectFile.build中,您可以定义Clean目标(在这种情况下不会使用CommonFile_Clean.build),也可以使用CommonFile_Clean.build中定义的默认实现。
当然,如果您有大量目标,这将是相当多的工作。
希望有所帮助。
答案 1 :(得分:2)
不,我刚尝试过,因为我有类似的设置,因为我拥有了我们在commonFile.build中使用的所有构建目标,然后使用以下代码将其引入。 ..
<include buildfile="../commonFile.build"/>
在我的newFile.build(包括文件顶部的commonFile.build)中,我添加了一个名为“build”的新目标,因为它存在于commonFile中,这是你得到的错误消息。 ..
建立失败
名为'build'的重复目标!
好主意,可能是OO原则的讽刺,但遗憾的是它不起作用。
有什么好处吗?