<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
    
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us">
      <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
        <title>Whichresource Task</title>
      </link>
    </meta>
  </head>


  <body>
    <h2><a name="whichresource">Whichresource</a></h2>
    <h3>Description</h3>
    <p>
      Find a class or resource on the supplied classpath, or the
      system classpath if none is supplied.
      The named property is set if the item can be found.
      For example:
    </p>
<blockquote><pre>
  &lt;whichresource resource="/log4j.properties" property="log4j.url" &gt;
</pre></blockquote>
    <h3>Parameters</h3>
    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">property</td>
        <td valign="top">
          The property to fill with the URL of the resource of class.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">class</td>
        <td valign="top">
          The name of the class to look for.
        </td>
        <td valign="top" align="center" rowspan="2">Exactly one of these.</td>
      </tr>
      <tr>
        <td valign="top">resource</td>
        <td valign="top">
          The name of the resource to look for.
        </td>
      </tr>
      <tr>
        <td valign="top">classpath</td>
        <td valign="top">
          The classpath to use when looking up <code>class</code>
          or <code>resource</code>.
        </td>
        <td align="center" valign="top">No</td>
      </tr>
      <tr>
        <td valign="top">classpathref</td>
        <td valign="top">
          The classpath to use, given as a
          <a href="../using.html#references">reference</a>
          to a path defined elsewhere.
          <em>Since Apache Ant 1.7.1.</em>
        </td>
        <td align="center" valign="top">No</td>
      </tr>
    </table>
    <h3>Parameters specified as nested elements</h3>
    <h4>classpath</h4>
    <p>
      <code>Whichresource</code>'s <code>classpath</code> attribute is a
      <a href="../using.html#path">path-like structure</a> and can also be
      set via a nested <code>&lt;classpath&gt;</code> element.
    </p>
    <h3>Examples</h3>
    <p>
      The following shows using a classpath reference.
    </p>
<blockquote><pre>
  &lt;path id="bsf.classpath"&gt;
    &lt;fileset dir="${user.home}/lang/bsf" includes="*.jar"/&gt;
  &lt;/path&gt;
  &lt;whichresource property="bsf.class.location"
                 class="org.apache.bsf.BSFManager"
                 classpathref="bsf.classpath"/&gt;
  &lt;echo&gt;${bsf.class.location}&lt;/echo&gt;
</pre></blockquote>
    <p>
      The following shows using a nested classpath.
    </p>
<blockquote><pre>
  &lt;whichresource
    property="ant-contrib.antlib.location"
    resource="net/sf/antcontrib/antlib.xml"&gt;
    &lt;classpath&gt;
      &lt;path path="f:/testing/ant-contrib/target/ant-contrib.jar"/&gt;
    &lt;/classpath&gt;
  &lt;/whichresource&gt;
  &lt;echo&gt;${ant-contrib.antlib.location}&lt;/echo&gt;
</pre></blockquote>
  </body>
</html>
