## The Jar Scanner Component

### Table of Contents

- Introduction
- Attributes
  1. Common Attributes
  2. Standard Implementation
- Nested Components
- Special Features

### Introduction

The Jar Scanner element represents the component that is used to scan the web application for JAR files and directories of class files. It is typically used during web application start to identify configuration files such as TLDs or web-fragment.xml files that must be processed as part of the web application initialisation.

A Jar Scanner element MAY be nested inside a Context component.

For example you can include the bootstrap classpath when scanning for jar files:

    <Context>
      ...
      <JarScanner scanBootstrapClassPath="true"/>
      ...
    </Context>

If a Jar Scanner element is not included, a default Jar Scanner configuration will be created automatically, which is sufficient for most requirements.

### Attributes

#### Common Attributes

All implementations of Jar Scanner support the following attributes:

Attribute | Description
--- | ---
`className` | Java class name of the implementation to use. This class must implement the `org.apache.tomcat.JarScanner` interface. If not specified, the standard value (defined below) will be used.

#### Standard Implementation

The standard implementation of Jar Scanner is org.apache.tomcat.util.scan.StandardJarScanner. It supports the following additional attributes (in addition to the common attributes listed above):

Attribute | Description
--- | ---

`scanAllDirectories`

If `true`, any directories found on the classpath will be checked to see if they are expanded JAR files. The default is `false`.

Tomcat determines if a directory is an expanded JAR file by looking for a META-INF sub-directory. Only if the META-INF sub-directory exists, the directory is assumed to be an expanded JAR file. Note that for scans for matches to `@HandlesTypes` annotations, all directories will be scanned irrespective of the presence or not of a META-INF sub-directory.

`scanAllFiles` | If `true`, any files found on the classpath will be checked to see if they are Jar files rather than relying on the file extension being `.jar`. The default is `false`.
`scanClassPath` | If `true`, the full web application classpath, including the shared and common classloaders and the system classpath (but not the bootstrap classpath) will be scanned for Jar files in addition to the web application. The default is `true`.
`scanBootstrapClassPath` | If scanClassPath is `true` and this is `true` the bootstrap classpath will also be scanned for Jar files. The default is `false`.
`scanManifest` | If `true`, the Manifest files of any JARs found will be scanned for additional class path entries and those entries will be added to the URLs to scan. The default is `true`.

### Nested Components

Only a Jar Scan Filter may be nested inside a Jar Scanner element.

### Special Features

No special features are associated with a Jar Scanner element.