开发者

Ant 1.8 include or import with nested resource collection

I'd like to have Ant automatically include or import resources matching a particular pattern, but I'm really struggling with the syntax. Here's what I've tried:

<import>
    <fileset dir="${basedir}" includes="*-graph.xml" />
</import>

However, I just get the error message

import requires file attribute or at least one nested resource

The documentation for import (and include) both say that you can use a nested resource collection, and the document开发者_如何学JAVAation for resource collections says <fileset> is a resource collection. I've Googled and can't find any useful examples at all.

I'm using Ant 1.8.1 (verified with ant -version)

EDIT

Found the problem. Firstly, SOMETHING has to match the expression. With no files that match, it blows up - even with optional=true, which is odd! Secondly, the matching files have be valid Ant file (even if they just contain <project/> - simply creating an empty file wasn't good enough).

Better error messages, please Apache! :-)


Try:

<foreach target="-import" param="file.name">
  <fileset dir="${basedir}" includes="*-graph.xml" />
</foreach>

<target name="-import">
  <import file="${file.name}" />
</target>

is in the ant-contrib tasks (http://ant-contrib.sourceforge.net/tasks/tasks/index.html) I'm not sure if this will work, I just came up with it on the fly.


Here is a simple way to deal with this problem:

<project name="the-name-of-the-project">
  <import>
    <fileset dir="${basedir}" includes="*-graph.xml"  erroronmissingdir="false"/>
    <fileset file="${ant.file.the-name-of-the-project}"/>
  </import>
</project>

This way, the set of imported files is never empty since it includes the file containing this declaration. This works for <import> directives only, since it omits already imported files; <include> directives would trivially lead to a recursion.

Note the erroronmissingdir="false" is optional if basedir always exists.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜