A scanner that recursively scans URI-based resources present in a set of package names, and nested package names of that set. (Recursive scanning of nested packages can be disabled using a proper constructor.)
The URIs for a package name are obtained, by default, by invoking {@link ClassLoader#getResources(java.lang.String) } with the parameter thatis the package name with "." replaced by "/".
Each URI is then scanned using a registered {@link UriSchemeResourceFinderFactory} thatsupports the URI scheme.
The following are registered by default. The {@link FileSchemeResourceFinderFactory} for "file" URI schemes.The {@link JarZipSchemeResourceFinderFactory} for "jar" or "zip" URI schemes to jarresources. The {@link VfsSchemeResourceFinderFactory} for the JBoss-based "vfsfile" and "vfszip"URI schemes.
Further schemes may be registered by registering an implementation of {@link UriSchemeResourceFinderFactory} in the META-INF/services file whose name is thethe fully qualified class name of {@link UriSchemeResourceFinderFactory}.
If a URI scheme is not supported a {@link ResourceFinderException} will be thrownand package scanning deployment will fail.
@author Paul Sandoz
@author Jakub Podlesak (jakub.podlesak at oracle.com)