1

我想创建一个 Ant 构建文件,其中包含一些文件作为一种插件。

因此,如果我想激活项目中的一个功能——比如 pmd-checking——我将一个 pmd.xml 复制到一个目录中,并且 build.xml 开始了这个想法,即 pmd.xml 存在并导入它,这样新的目标可用于构建。

但是“导入”任务只能用作顶级任务,所以我不知道如何实现这个功能。Ant可以做到这一点,如果可以,我该怎么做?

编辑:我更喜欢一种解决方案,它允许新目标出现在ant -p.

4

4 回答 4

3

您可以使用ant任务,甚至可以参数化目标名称。这是一个例子:

<ant antfile="plugins/pmd.xml" target="${pmd-target}"/>

如果你想要更多的灵活性,我建议检查gantgradle

于 2008-11-13T00:44:53.810 回答
3

导入任务的文档中,记下该optional属性。将此设置为true并且缺少包含不会破坏构建。

如果找到,则包含so pmd.xml,但如果不是,则不会破坏构建。

ant -p未经测试,因此如果找到导入文件中的目标,我不肯定。

于 2008-11-13T02:42:12.560 回答
2

导入任务文档中没有明确说明,但该任务接受文件集作为单个文件的替代方案。因此,在顶层,这应该可以解决问题,并且创建的目标按以下方式列出ant -p

<property name="plugins.dir" value="plugins" />
<fileset id="plugin.modules" dir="${plugins.dir}">
    <include name="**/*.xml" />
</fileset>

<import>
    <fileset refid="plugin.modules" />
</import>

一个问题是'plugins'目录中必须至少有一个插件,否则导入将失败。您可以只创建一个占位符文件 - 比如说empty.xml

 <project />

一旦那里,您只需将任何新插件放在插件目录中,它们将被未来的构建导入。

于 2011-01-09T14:45:27.743 回答
0

我不确定你想要的在概念上是否可行。命令行-p参数不执行任何任务,它只是解析文件。你想要的东西需要被执行。

但是,我想看看ant-contrib项目。它有一个条件<if>任务,它可能使顶级导入仅在您需要时才起作用。

于 2008-11-13T01:19:06.333 回答