4.3. Locating Maven Artifacts at Run Time
Overview
At run time the container strikes a balance between accessing artifacts locally and downloading artifacts from remote repositories. The container will first search all systems local to the container. If it cannot locate the artifacts in a local repository, it will then search remote repositories.
For default features, the artifacts are always stored in the container's system repository. For non-default features, third party bundles, or customer developed bundles, it is likely that Maven will need to search remote repositories to locate the artifacts.
Procedure for locating artifacts
Figure 4.2, “How the Container Locates Artifacts at Run Time” shows an overview of the procedure that Red Hat JBoss Fuse follows when a feature or bundle is installed at run time.
Figure 4.2. How the Container Locates Artifacts at Run Time
The steps followed to locate the required Maven artifacts are:
- The container searches for artifacts in the system repository.This repository contains all of the artifacts provided with the JBoss Fuse installation. The system repository is located at
EsbInstallDir/system
. - If an artifact is not available in the system repository, the container searches any other configured default repositories.JBoss Fuse allows you to specify one or more repositories into which you can place artifacts. For example, you could use a shared folder as a default repository that provides an easy way to distribute bundles to remote machines. See the section called “Default repositories” for details on configuring the default repositories.
- If the artifact is not available in the default repositories, the container searches the Maven local repository.The default location of the local repository is the
.m2/repository/
directory under the user's home directory. See the section called “Local repository” for details on configuring the local repository. - If the artifact is not available in any of the local repositories, the container searches the remote repositories specified in the JBoss Fuse configuration.The remote repositories are specified by the
org.ops4j.pax.url.mvn.repositories
property in theorg.ops4j.pax.url.mvn.
PID. See the section called “Remote repositories” for details on configuring the remote repositories that the container will check.NoteIf an artifact is found in a remote repository, it is automatically downloaded and installed into the local repository.
Default repositories
The default repositories are a list of repositories that the container always checks first. The list is specified by the
org.ops4j.pax.url.mvn.defaultRepositories
in the org.ops4j.pax.url.mvn
PID. The property's initial setting is a single entry for the container's system repository as shown in Example 4.1, “Initial Setting for a Container's Default Repositories”.
Example 4.1. Initial Setting for a Container's Default Repositories
org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}/${karaf.default.repository}@snapshots
The
org.ops4j.pax.url.mvn.defaultRepositories
property is a comma-separated list, so you can specify multiple default repositories. You can specify the repository location using a URL with a file:
, http:
, or https:
scheme. You can optionally add the following suffixes to the URL:
@snapshots
—allow snapshot versions to be read from the repository@noreleases
—do not allow release versions to be read from the repository
Note
It is recommended that you leave the container's system repository as the first entry in the list.
Local repository
The container resolves the location of the local repository in the following manner:
- Use the location specified by the
org.ops4j.pax.url.mvn.localRepository.localRepository
property in theorg.ops4j.pax.url.mvn
PID. - Otherwise, use the location specified by the
localRepository
element in thesettings.xml
file specified by theorg.ops4j.pax.url.mvn.localRepository.settings
property in theorg.ops4j.pax.url.mvn
PID. - Otherwise, use the location specified by the
localRepository
element in the.m2/settings.xml
file located under the user's home directory. - Otherwise, use the location specified by the
localRepository
element in theM2_HOME/conf/settings.xml
file. - Otherwise, the default location is
.m2/repository/
under the user's home directory.
Remote repositories
The remote repositories checked by the container are specified by the
org.ops4j.pax.url.mvn.repositories
property in the org.ops4j.pax.url.mvn
PID. The repositories are specified as a comma-separated list as shown in Example 4.2, “Setting a Container's Remote Repositories”.
Example 4.2. Setting a Container's Remote Repositories
org.ops4j.pax.url.mvn.repositories= \ http://repo1.maven.org/maven2, \ http://repo.fusesource.com/maven2, \ http://repo.fusesource.com/maven2-snapshot@snapshots@noreleases, \ http://repo.fusesource.com/nexus/content/repositories/releases, \ http://repo.fusesource.com/nexus/content/repositories/snapshots@snapshots@noreleases, \ http://repository.apache.org/content/groups/snapshots-group@snapshots@noreleases, \ http://repository.ops4j.org/maven2, \ http://svn.apache.org/repos/asf/servicemix/m2-repo, \ http://repository.springsource.com/maven/bundles/release, \ http://repository.springsource.com/maven/bundles/external
You can optionally add the following suffixes to the URsL:
@snapshots
—allow snapshot versions to be read from the repository@noreleases
—do not allow release versions to be read from the repository