## Available

### Description

Sets a property if a resource is available at run time. This resource can be a file, a directory, a class in the classpath, or a JVM system resource.

Note: a class is available in the classpath when it can be loaded; i.e., all classes it depends on must be in the classpath, too.

If the resource is present, the property value is set to true by default; otherwise, the property is not set. You can set the value to something other than the default by specifying the value attribute.

Normally, this task is used to set properties that are useful to avoid target execution depending on system parameters.

### Parameters

Attribute | Description | Required
--- | --- | ---
property | The name of the property to set. | Yes
value | The value to set the property to. | No; defaults to true
classname | The class to look for in the classpath. | Exactly one of the three
file | The file to look for.
resource | The resource to look for in the JVM.
classpath | The classpath to use when looking up classname or resource. | No
filepath | The path to use when looking up file. | No
classpathref | The classpath to use, given as a reference to a path defined elsewhere. | No
type | The type of file to look for, either a directory (type=dir) or a file (type=file). If not set, the property will be set if the name specified in the file attribute exists as either a file or a directory. | No
ignoresystemclasses | Ignore Ant's runtime classes, using only the specified classpath. Only affects the classname attribute. | No; defaults to false
searchparents | This contains the behaviour of the file type. If true, the task will, when searching for a file, search not only the directories specified but will also search the parent directories of those specified. If false, only the directories specified will be searched. Since Ant 1.7 | No; defaults to false

### Parameters specified as nested elements

#### classpath

`Available`'s classpath attribute is a path-like structure and can also be set via a nested `<classpath>` element.

#### filepath

`Available`'s filepath attribute is a path-like structure and can also be set via a nested `<filepath>` element.

### Examples

Set the `Myclass.present` property to the value true if the class `org.whatever.Myclass` is found in Ant's classpath.

    <available classname="org.whatever.Myclass" property="Myclass.present"/>

Set the `jaxp.jar.present` property to the value true if the file `./lib/jaxp11/jaxp.jar` is found.

    <property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>
    <available file="${jaxp.jar}" property="jaxp.jar.present"/>

Set the `local.lib.present` property to the value true if the directory `/usr/local/lib` is found.

    <available file="/usr/local/lib" type="dir"
               property="local.lib.present"/>

Set the `jaxp11.present` property to the value true if the class `javax.xml.transform.Transformer` is found in the classpath referenced by `jaxp` (in this case, `./lib/jaxp11/jaxp.jar`).

    ...in project ...
    <property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>
    <path id="jaxp" location="${jaxp.jar}"/>
    ...in target ...
    <available classname="javax.xml.transform.Transformer"
               classpathref="jaxp" property="jaxp11.present"/>

Set the `have.extras` property to the value true if the resource file `extratasks.properties` is found.

    <available property="have.extras" resource="extratasks.properties">
      <classpath>
        <pathelement location="/usr/local/ant/extra.jar"/>
      </classpath>
    </available>