## The Jar Scan Filter Component

### Table of Contents

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

### Introduction

The Jar Scan Filter element represents the component that filters results from the Jar Scanner before they are passed back to the application. It is typically used to skip the scanning of JARs that are known not to be relevant to some or all types of scan.

A Jar Scan Filter element MAY be nested inside a Jar Scanner component.

For example you can specify additional jar files when scanning for pluggable features:

    <Context>
      ...
      <JarScanner>
        <JarScanFilter
            pluggabilityScan="${tomcat.util.scan.StandardJarScanFilter.jarsToScan},
                           my_pluggable_feature.jar"/>
      </JarScanner>
      ...
    </Context>

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

### Attributes

#### Common Attributes

All implementations of Jar Scan Filter support the following attributes:

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

#### Standard Implementation

The standard implementation of Jar Scan Filter is org.apache.tomcat.util.scan.StandardJarScanFilter. Additional attributes that it supports (in addition to the common attributes listed above) are listed in the table.

The values for pluggabilitySkip, pluggabilityScan, tldSkip, tldScan attributes are lists of file name pattern. The patterns are separated by comma (','). The leading and trailing whitespace characters in a pattern are ignored. The patterns are matched case-sensitively. The following two special characters are supported:

- '*' - means zero or more characters,
- '?' - means one and only one character.

Note that excluding a JAR from the pluggability scan will prevent a ServletContainerInitializer from being loaded from a web application JAR (i.e. one located in `/WEB-INF/lib`) but it will not prevent a ServletContainerInitializer from being loaded from the container (Tomcat). To prevent a ServletContainerInitializer provided by container from being loaded, use the `containerSciFilter` property of the Context.

Attribute | Description
--- | ---
`pluggabilitySkip` | The comma separated list of JAR file name patterns to skip when scanning for pluggable features introduced by Servlet 3.0 specification. If not specified, the default is obtained from the `tomcat.util.scan.StandardJarScanFilter.jarsToSkip` system property.
`pluggabilityScan` | The comma separated list of JAR file name patterns to scan when scanning for pluggable features introduced by Servlet 3.0 specification. If not specified, the default is obtained from the `tomcat.util.scan.StandardJarScanFilter.jarsToScan` system property.

`defaultPluggabilityScan`

Controls if JARs are scanned or skipped by default when scanning for the pluggable features. If `true`, a JAR is scanned when its name either matches none of pluggabilitySkip patterns or any of pluggabilityScan patterns. If `false`, a JAR is scanned when its name matches any of pluggabilityScan patterns and none of pluggabilitySkip patterns. If not specified, the default value is `true`.

`tldSkip` | The comma separated list of JAR file name patterns to skip when scanning for tag libraries (TLDs). If not specified, the default is obtained from the `tomcat.util.scan.StandardJarScanFilter.jarsToSkip` system property.
`tldScan` | The comma separated list of JAR file name patterns to scan when scanning for tag libraries (TLDs). If not specified, the default is obtained from the `tomcat.util.scan.StandardJarScanFilter.jarsToScan` system property.
`defaultTldScan` | Controls if JARs are scanned or skipped by default when scanning for TLDs. If `true`, a JAR is scanned when its name either matches none of tldSkip patterns or any of tldScan patterns. If `false`, a JAR is scanned when its name matches any of tldScan patterns and none of tldSkip patterns. If not specified, the default value is `true`.

### Nested Components

No components may be nested inside a Jar Scan Filter element.

### Special Features

No special features are associated with a Jar Scan Filter element.