FileDocCategorySizeDatePackage
JarLibResolveTask.javaAPI DocApache Ant 1.709411Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.taskdefs.optional.extension

JarLibResolveTask

public class JarLibResolveTask extends org.apache.tools.ant.Task
Tries to locate a JAR to satisfy an extension and place location of JAR into property.
ant.task
name="jarlib-resolve"

Fields Summary
private String
propertyName
The name of the property in which the location of library is stored.
private Extension
requiredExtension
The extension that is required.
private final ArrayList
resolvers
The set of resolvers to use to attempt to locate library.
private boolean
checkExtension
Flag to indicate that you should check that the librarys resolved actually contain extension and if they don't then raise an exception.
private boolean
failOnError
Flag indicating whether or not you should throw a BuildException if you cannot resolve library.
Constructors Summary
Methods Summary
public voidaddConfiguredAnt(org.apache.tools.ant.taskdefs.optional.extension.resolvers.AntResolver ant)
Adds Ant resolver to run an Ant build file to generate a library.

param
ant the AntResolver to generate the library.

        resolvers.add(ant);
    
public voidaddConfiguredExtension(ExtensionAdapter extension)
Set the Extension looking for.

param
extension Set the Extension looking for.

        if (null != requiredExtension) {
            final String message = "Can not specify extension to "
                + "resolve multiple times.";
            throw new BuildException(message);
        }
        requiredExtension = extension.toExtension();
    
public voidaddConfiguredLocation(org.apache.tools.ant.taskdefs.optional.extension.resolvers.LocationResolver loc)
Adds location resolver to look for a library in a location relative to project directory.

param
loc the resolver location to search.

        resolvers.add(loc);
    
public voidaddConfiguredUrl(org.apache.tools.ant.taskdefs.optional.extension.resolvers.URLResolver url)
Adds a URL resolver to download a library from a URL to a local file.

param
url the URL resolver from which to download the library

        resolvers.add(url);
    
private voidcheckExtension(java.io.File file)
Check if specified file satisfies extension. If it does then set the relevent property else throw a BuildException.

param
file the candidate library
throws
BuildException if library does not satisfy extension

        if (!file.exists()) {
            final String message =
                "File " + file + " does not exist";
            throw new BuildException(message);
        }
        if (!file.isFile()) {
            final String message =
                "File " + file + " is not a file";
            throw new BuildException(message);
        }

        if (!checkExtension) {
            final String message = "Setting property to " + file
                + " without verifying library satisfies extension";
            getProject().log(message, Project.MSG_VERBOSE);
            setLibraryProperty(file);
        } else {
            getProject().log("Checking file " + file
                + " to see if it satisfies extension", Project.MSG_VERBOSE);
            final Manifest manifest =
                ExtensionUtil.getManifest(file);
            final Extension[] extensions =
                Extension.getAvailable(manifest);
            for (int i = 0; i < extensions.length; i++) {
                final Extension extension = extensions[ i ];
                if (extension.isCompatibleWith(requiredExtension)) {
                    setLibraryProperty(file);
                    return;
                }
            }

            getProject().log("File " + file + " skipped as it "
                + "does not satisfy extension", Project.MSG_VERBOSE);

            final String message =
                "File " + file + " does not satisfy extension";
            throw new BuildException(message);
        }
    
public voidexecute()
Execute the task.

throws
BuildException if the task fails.

        validate();

        getProject().log("Resolving extension: " + requiredExtension,
                          Project.MSG_VERBOSE);

        String candidate =
            getProject().getProperty(propertyName);

        if (null != candidate) {
            final String message = "Property Already set to: " + candidate;
            if (failOnError) {
                throw new BuildException(message);
            }
            getProject().log(message, Project.MSG_ERR);
            return;
        }

        final int size = resolvers.size();
        for (int i = 0; i < size; i++) {
            final ExtensionResolver resolver =
                (ExtensionResolver) resolvers.get(i);

            getProject().log("Searching for extension using Resolver:" + resolver,
                              Project.MSG_VERBOSE);

            try {
                final File file =
                    resolver.resolve(requiredExtension, getProject());
                try {
                    checkExtension(file);
                    return;
                } catch (final BuildException be) {
                    final String message = "File " + file + " returned by "
                        + "resolver failed to satisfy extension due to: "
                        + be.getMessage();
                    getProject().log(message, Project.MSG_WARN);
                }
            } catch (final BuildException be) {
                final String message = "Failed to resolve extension to file "
                    + "using resolver " + resolver + " due to: " + be;
                getProject().log(message, Project.MSG_WARN);
            }
        }

        missingExtension();
    
private voidmissingExtension()
Utility method that will throw a {@link BuildException} if {@link #failOnError} is true else it just displays a warning.

        final String message =
            "Unable to resolve extension to a file";
        if (failOnError) {
            throw new BuildException(message);
        }
        getProject().log(message, Project.MSG_ERR);
    
public voidsetCheckExtension(boolean checkExtension)
Check nested libraries for extensions

param
checkExtension if true, libraries returned by nested resolvers should be checked to see if they supply extension.

        this.checkExtension = checkExtension;
    
public voidsetFailOnError(boolean failOnError)
Set whether to fail if error.

param
failOnError if true, failure to locate library should fail build.

        this.failOnError = failOnError;
    
private voidsetLibraryProperty(java.io.File file)
Utility method to set the appropriate property to indicate that specified file satisfies library requirements.

param
file the library

        getProject().setNewProperty(propertyName,
                                     file.getAbsolutePath());
    
public voidsetProperty(java.lang.String property)
The name of the property in which the location of library is stored.

param
property The name of the property in which the location of library is stored.


                                                     
         
        this.propertyName = property;
    
private voidvalidate()
Validate the tasks parameters.

throws
BuildException if invalid parameters found

        if (null == propertyName) {
            final String message = "Property attribute must be specified.";
            throw new BuildException(message);
        }

        if (null == requiredExtension) {
            final String message = "Extension element must be specified.";
            throw new BuildException(message);
        }