# Package org.apache.nutch.plugin

The Nutch `Plugin` System.

The Nutch Plugin System provides a way to extend nutch functionality. A large part of the functionality of Nutch are provided by plugins: All of the parsing, indexing and searching that nutch does is actually accomplished by various plugins.

In writing a plugin, you're actually providing one or more extensions of the existing extension-points (hooks). The core Nutch extension-points are themselves defined in a plugin, the `nutch-extensionpoints` plugin. Each extension-point defines an interface that must be implemented by the extension. The core extension-points and extensions available in Nutch are listed in the `Pluggable` interface.

See Also:
  Nutch plugin manifest DTD, Plugin Central, About Plugins, Why Nutch has a Plugin System?, Which technical concepts are behind the nutch plugin system?, What's the problem with Plugins and Class loading?, Writing Plugin Example

- Interface Summary
  Interface | Description
  --- | ---
  Pluggable | Defines the capability of a class to be plugged into Nutch.

- Class Summary
  Class | Description
  --- | ---
  Extension | An `Extension` is a kind of listener descriptor that will be installed on a concrete `ExtensionPoint` that acts as kind of Publisher.
  ExtensionPoint | The `ExtensionPoint` provide meta information of a extension point.
  Plugin | A nutch-plugin is an container for a set of custom logic that provide extensions to the nutch core functionality or another plugin that provides an API for extending.
  PluginClassLoader | The `PluginClassLoader` is a child-first classloader that only contains classes of the runtime libraries setuped in the plugin manifest file and exported libraries of plugins that are required plugins.
  PluginDescriptor | The `PluginDescriptor` provide access to all meta information of a nutch-plugin, as well to the internationalizable resources and the plugin own classloader.
  PluginManifestParser | The `PluginManifestParser` provides a mechanism for parsing Nutch plugin manifest files (`plugin.xml`) contained in a `String` of plugin directories.
  PluginRepository | The plugin repository is a registry of all plugins.
  URLStreamHandlerFactory | This URLStreamHandlerFactory knows about all the plugins in use and thus can create the correct URLStreamHandler even if it comes from a plugin classpath.

- Exception Summary
  Exception | Description
  --- | ---
  CircularDependencyException | `CircularDependencyException` will be thrown if a circular dependency is detected.
  MissingDependencyException | `MissingDependencyException` will be thrown if a plugin dependency cannot be found.
  PluginRuntimeException | `PluginRuntimeException` will be thrown until a exception in the plugin managemnt occurs.