Resources

Project Documentation

Legend

External Link

Opens in a new window

Artifact Repositories

A repository (definition) in Maven is used to
hold build artifacts and dependencies of varying types.

There are strictly only two types of repositories: local and remote. The local repository refers to a copy
on your own installation that is a cache of the remote downloads, and also contains the temporary
build artifacts that you have not yet released.

Remote repositories refer to any other type of repository, accessed by a variety of protocols such as
file:// and http://. These repositories might be a truely remote repository
set up by a third party to provide their artifacts for downloading (for example, Maven's
central repository).
Other "remote" repositories may be internal repositories
set up on a file or HTTP server within your company, used to share private artifacts between development teams
and for releases.

The local and remote repositories are structured the same way so that scripts can easily be run on either
side, or they can be synced for offline used. In general use, the layout of the repositories is completely
transparent to the Maven user, however.

Why not Store JARs in CVS?

It is not recommended that you store your JARs in CVS. Maven tries to
promote the notion of a user local repository where JARs, or any
project artifacts, can be stored and used for any number of builds.
Many projects have dependencies such as XML parsers and standard utilities that
are often replicated in typical builds. With Maven these standard utilities
can be stored in your local repository and shared by any number of builds.

This has the following advantages:

It uses less storage - while a repository is typically quite large, because each JAR is only kept
in the one place it is actually saving space, even though it may not seem that way

It makes checking out a project quicker - initial checkout, and to a small degree updating, a
project will be faster if there are no large binary files in CVS. While they may need to be downloaded
again afterwards anyway, this only happens once and may not be necessary for some common JARs already in
place.

No need for versioning - CVS and other source control systems are designed for versioning files,
but external dependencies typically don't change, or if they do their filename changes anyway to indicate the
new version. Storing these in CVS doesn't have any added benefit over keeping them in a local artifact
cache.

Using Repositories

In general, you should not need to do anything with the local repository on a regular basis, except clean
it out if you are short on disk space (or erase it completely if you are willing to download everything again).

For the remote repositories, they are used for both downloading and uploading (if you have the permission to
do so).

Downloading from a Remote Repository

Downloading in Maven is triggered by a project declaring a dependency that is not present in the local
repository (or for a SNAPSHOT, when the remote repository contains one that is newer).
By default, Maven will download from it's central repository.

To override this, you need to set the property maven.repo.remote as follows:

You can set this in your ~/build.properties file to globally use a certain mirror, however
note that it is common for a project to customise the repository in their project.properties
and that your setting will take precedence. If you find that dependencies are not being found, check you
have not overridden the remote repository.

The protocols that are currently supported for a remote repository are http,
https, sftp and file. Note that sftp
is only supported since Maven 1.1-beta-3, and you'll have to set the username and password in the url, eg: