//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

== 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).
