org.jboss.dna.maven
Class MavenRepository

java.lang.Object
  extended by org.jboss.dna.maven.MavenRepository
All Implemented Interfaces:
ClassLoaderFactory

public class MavenRepository
extends Object
implements ClassLoaderFactory

A Maven 2 repository that can be used to store and access artifacts like JARs and source archives within a running application. This class understands Maven 2 Project Object Model (POM) files, and thus is able to analyze dependencies and provide a class loader that accesses libraries using these transitive dependencies.

Instances are initialized with an authenticated Maven URL provider, which is typically a JcrMavenUrlProvider instance configured with a JCR Repository and path to the root of the repository subtree in that workspace. The repository can either already exist and contain the required artifacts, or it will be created as artifacts are loaded. Then to use libraries that are in the repository, simply obtain the class loader by specifying the artifact identifiers for the libraries used directly by your code. This class loader will add any libraries that are required by those you supply.


Constructor Summary
MavenRepository(MavenUrlProvider urlProvider)
           
 
Method Summary
 boolean exists(MavenId mavenId)
          Determine whether the identified library exists in this Maven repository.
 Set<MavenId> exists(MavenId firstId, MavenId... mavenIds)
          Determine which of the identified libraries exist in this Maven repository.
 ClassLoader getClassLoader(ClassLoader parent, MavenId... mavenIds)
          Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs.
 ClassLoader getClassLoader(ClassLoader parent, String... coordinates)
          Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs.
 ClassLoader getClassLoader(String... coordinates)
          Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs.
 List<MavenDependency> getDependencies(MavenId mavenId)
          Get the dependencies for the Maven project with the specified ID.
 URL getUrl(MavenId mavenId, ArtifactType artifactType, SignatureType signatureType)
          Get the URL for the artifact with the specified type in the given Maven project.
 URL getUrl(MavenId mavenId, ArtifactType artifactType, SignatureType signatureType, boolean createIfRequired)
          Get the URL for the artifact with the specified type in the given Maven project.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MavenRepository

public MavenRepository(MavenUrlProvider urlProvider)
Method Detail

getClassLoader

public ClassLoader getClassLoader(ClassLoader parent,
                                  MavenId... mavenIds)
Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs. This method always returns a class loader, even when none of the specified libraries exist in this repository.

Parameters:
parent - the parent class loader that will be consulted before any project class loaders; may be null if the current thread's context class loader or the class loader that loaded this class should be used
mavenIds - the IDs of the libraries in this Maven repository
Returns:
the class loader
Throws:
IllegalArgumentException - if no Maven IDs are passed in or if any of the IDs are null
See Also:
exists(MavenId), exists(MavenId,MavenId...)

getClassLoader

public ClassLoader getClassLoader(String... coordinates)
Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs. This method always returns a class loader, even when none of the specified libraries exist in this repository.

Specified by:
getClassLoader in interface ClassLoaderFactory
Parameters:
coordinates - the IDs of the libraries in this Maven repository
Returns:
the class loader
Throws:
IllegalArgumentException - if no coordinates are passed in or if any of the coordinate references is null

getClassLoader

public ClassLoader getClassLoader(ClassLoader parent,
                                  String... coordinates)
Get a class loader that has as its classpath the JARs for the libraries identified by the supplied IDs. This method always returns a class loader, even when none of the specified libraries exist in this repository.

Parameters:
parent - the parent class loader that will be consulted before any project class loaders; may be null if the current thread's context class loader or the class loader that loaded this class should be used
coordinates - the IDs of the libraries in this Maven repository
Returns:
the class loader
Throws:
IllegalArgumentException - if no coordinates are passed in or if any of the coordinate references is null

exists

public boolean exists(MavenId mavenId)
               throws MavenRepositoryException
Determine whether the identified library exists in this Maven repository.

Parameters:
mavenId - the ID of the library
Returns:
true if this repository contains the library, or false if it does not exist (or the ID is null)
Throws:
MavenRepositoryException - if there is a problem connecting to or using the Maven repository, as configured
See Also:
exists(MavenId,MavenId...)

exists

public Set<MavenId> exists(MavenId firstId,
                           MavenId... mavenIds)
                    throws MavenRepositoryException
Determine which of the identified libraries exist in this Maven repository.

Parameters:
firstId - the first ID of the library to check
mavenIds - the IDs of the libraries; any null IDs will be ignored
Returns:
the set of IDs for libraries that do exist in this repository; never null
Throws:
MavenRepositoryException - if there is a problem connecting to or using the Maven repository, as configured
See Also:
exists(MavenId)

getDependencies

public List<MavenDependency> getDependencies(MavenId mavenId)
Get the dependencies for the Maven project with the specified ID.

This implementation downloads the POM file for the specified project to extract the dependencies and exclusions.

Parameters:
mavenId - the ID of the project; may not be null
Returns:
the list of dependencies
Throws:
IllegalArgumentException - if the MavenId reference is null
MavenRepositoryException - if there is a problem finding or reading the POM file given the MavenId

getUrl

public URL getUrl(MavenId mavenId,
                  ArtifactType artifactType,
                  SignatureType signatureType)
           throws MalformedURLException
Get the URL for the artifact with the specified type in the given Maven project. The resulting URL can be used to connect to the repository to read or write the artifact's content.

Parameters:
mavenId - the ID of the Maven project; may not be null
artifactType - the type of artifact; may be null, but the URL will not be able to be read or written to
signatureType - the type of signature; may be null if the signature file is not desired
Returns:
the URL to this artifact; never null
Throws:
MalformedURLException - if the supplied information cannot be turned into a valid URL

getUrl

public URL getUrl(MavenId mavenId,
                  ArtifactType artifactType,
                  SignatureType signatureType,
                  boolean createIfRequired)
           throws MalformedURLException
Get the URL for the artifact with the specified type in the given Maven project. The resulting URL can be used to connect to the repository to read or write the artifact's content.

Parameters:
mavenId - the ID of the Maven project; may not be null
artifactType - the type of artifact; may be null, but the URL will not be able to be read or written to
signatureType - the type of signature; may be null if the signature file is not desired
createIfRequired - true if the node structure should be created if any part of it does not exist; this always expects that the path to the top of the repository tree exists.
Returns:
the URL to this artifact; never null
Throws:
MalformedURLException - if the supplied information cannot be turned into a valid URL


Copyright © 2008-2009 JBoss, a division of Red Hat. All Rights Reserved.