我想创建一个 Ant 构建文件,其中包含一些文件作为一种插件。
因此,如果我想激活项目中的一个功能——比如 pmd-checking——我将一个 pmd.xml 复制到一个目录中,并且 build.xml 开始了这个想法,即 pmd.xml 存在并导入它,这样新的目标可用于构建。
但是“导入”任务只能用作顶级任务,所以我不知道如何实现这个功能。Ant可以做到这一点,如果可以,我该怎么做?
编辑:我更喜欢一种解决方案,它允许新目标出现在ant -p
.
我想创建一个 Ant 构建文件,其中包含一些文件作为一种插件。
因此,如果我想激活项目中的一个功能——比如 pmd-checking——我将一个 pmd.xml 复制到一个目录中,并且 build.xml 开始了这个想法,即 pmd.xml 存在并导入它,这样新的目标可用于构建。
但是“导入”任务只能用作顶级任务,所以我不知道如何实现这个功能。Ant可以做到这一点,如果可以,我该怎么做?
编辑:我更喜欢一种解决方案,它允许新目标出现在ant -p
.
在导入任务的文档中,记下该optional
属性。将此设置为true
并且缺少包含不会破坏构建。
如果找到,则包含so pmd.xml
,但如果不是,则不会破坏构建。
ant -p
未经测试,因此如果找到导入文件中的目标,我不肯定。
导入任务文档中没有明确说明,但该任务接受文件集作为单个文件的替代方案。因此,在顶层,这应该可以解决问题,并且创建的目标按以下方式列出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 />
一旦那里,您只需将任何新插件放在插件目录中,它们将被未来的构建导入。
我不确定你想要的在概念上是否可行。命令行-p
参数不执行任何任务,它只是解析文件。你想要的东西需要被执行。
但是,我想看看ant-contrib项目。它有一个条件<if>
任务,它可能使顶级导入仅在您需要时才起作用。