I was trying to track down some strange behavior in one of our custom resource collections and I think that I might have stumbled across a potential but in ResourceUtils. Specifically, in the "asFileResource" method:

     * Convenience method to turn any fileProvider into a basic
     * FileResource with the file's immediate parent as the basedir,
     * for tasks that need one.
     * @param fileProvider input
     * @return fileProvider if it is a FileResource instance, or a new
     * FileResource with fileProvider's file.
     * @since Ant 1.8
    public static FileResource asFileResource(FileProvider fileProvider) {
        if (fileProvider instanceof FileResource || fileProvider == null) {
            return (FileResource) fileProvider;
        FileResource result = new FileResource(fileProvider.getFile());
        return result;

This method purports to return a FileResource whose baseDir will be the parent of the file returned by the passed FileProvider. The only problem is that setBaseDir is never called on the new'ed up FileResource from this code path. Also, in the instanceof case there's no promise that the FileProvider cast to FileResource has a non-null basedir either.

The fix for my collection was simply to set the basedir on all of its resources. I think the real fix here might be that the FileResource(File) constructor should also set the basedir on the FileResource to the passed File's parent? I'm not sure the best way to fix this but I think that something is clearly not right.
Jeffrey E. (Jeff) Care
IBM WebSphere Application Server
WAS Release Engineering

WebSphere Mosiac
WebSphere Brandmark