h1. Apache Karaf Cave overview

Apache Karaf Cave is an Apache Karaf sub-project.

Cave is an implementation of the OSGi Repository specification, providing additional features such as a
complete Maven repository support, a REST API for management, support of remote repository proxy.

Cave deals with the requirements and capabilities of all artifacts.

Apache Karaf Cave provides the following features:

* *Storage*: Cave includes a storage backend. The default one is a simple filesystem backend. As the Cave backend
is designed in a plugin way, you can implement your own backend (for instance, JDBC or LDAP backend).
* *Repository Metadata Generation*: Cave creates the repository metadata for you, using the artifacts presents in the
repository storage.
* *Maven support*: Cave repositories act as a complete Maven repository, allowing you to use Cave directly with Maven.
* *REST API*: Cave provides a REST API to manipulate the repositories.
* *Artifact Upload*: Users can upload OSGi bundle in a Cave repository. It supports URLs like mvn:groupId/artifactId/version,
file:, http:, etc.
* *Repository proxy*: Cave is able to proxy an existing repository, for instance an existing Maven repository.
The artifacts are located on the "external" repository, Cave handles the repository metadata. Cave supports file: and http:
URLs, it means that Cave is able to browse a remote HTTP Maven repository for instance.
* *Repository population*: Cave is able to get artifacts present on an "external" repository (local file: or
remote http:), looking for OSGi bundles, and copy the artifacts in the Cave repository storage.

Karaf Cave provides two components:

* the cave-server is the full OSGi repository service, including the storage, the management layer, the REST service layer, etc.
* the cave-client is a local repository service proxy that use a remote Cave server (not yet available).