aQute.maven.api.IMavenRepo Maven / Gradle / Ivy
package aQute.maven.api;
import java.io.Closeable;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import org.osgi.util.promise.Promise;
import aQute.maven.provider.MavenBackingRepository;
/**
* This is an abstraction of a Maven repository. It is a repository backed by a
* local directory (usually ~/.m2/repository) and a remote release and/or
* snapshot repository that is accessed over http(s).
*
* The repository stores archives organized in revisions.
* Revisions are organized in programs. Archives are the files created
* per revision, they are distinguished by extension and
* classifier.
*
* Maven maintains the remote snapshots with date stamped archives. (The
* SNAPSHOT is replaced with a date stamp + build number). This repository can
* resolve the latest archive and provide a list of date stamped archives.
*/
public interface IMavenRepo extends Closeable {
/**
* The format for an archive is:
*
*
* group ':' artifact ( ':' extension ( ':' classifier )? )? ':' version ( '-SNAPSHOT' )?
*
*/
Pattern ARCHIVE_P = Pattern.compile(//
//
" (?[^:]+)" //
+ ": (?[^:]+)" //
+ "(:"//
+ " (?[^:]+)"//
+ " (:"//
+ " (?[^:]+)"//
+ " )?"//
+ ")?"//
+ ":"//
+ " (?[^:]+)", //
Pattern.COMMENTS);
/**
* Get the archive from the repository. Syntax:
*
*
* s = group ':' artifact (':' extension ( ':' classifier )?)? ':' version
*
*
* @param s the archive specified as string
*/
Archive getArchive(String s) throws Exception;
/**
* Get the revisions that belong to a program. This uses the
* {@code maven-metadata-xml} file in the program directory on the remote
* repository (release + snapshot). For a local only repository this must
* return an empty list.
*
* @param program the program to list the revisions for
* @return a list of revisions in the repository
*/
List getRevisions(Program program) throws Exception;
/**
* List the snapshot archives for a given revision. If the revision is not a
* snapshot, the list will be empty
*
* @param revision the revisions to list from
* @return the list snapshot archives
*/
List getSnapshotArchives(Revision revision) throws Exception;
/**
* For a given snapshot revision, get the latest resolved archive.
*
* @param revision the revision (MUST be snapshot)
* @param extension the extension of the archive
* @param classifier the classifier of the archive ( may be null)
* @return the archive as resolved against the remote maven-metadata.xml for
* the revision
*/
Archive getResolvedArchive(Revision revision, String extension, String classifier) throws Exception;
/**
* Get the file in the repositories local cache directory.
*
* @param archive The archive to fetch
* @return the file or null if not found
*/
Promise get(Archive archive) throws Exception;
/**
* Get the last updated time for a snapshot revision.
*
* @param revision the snapshot revision to get the time from
* @return the time of the snapshot revision remote update
*/
long getLastUpdated(Revision revision) throws Exception;
/**
* Create a release object to release the revision.
*
* @param revision the revision to release
* @return the Release object
*/
Release release(Revision revision, Properties context) throws Exception;
/**
* Take a generic snapshot archive and resolve it to the latest released
* snapshot.
*
* @param archive the archive to resolve
* @return the archive or null if not found
*/
Archive resolveSnapshot(Archive archive) throws Exception;
/**
* Get the file object for the archive. The file does not have to exist
*
* @param archive the archive to find the file for
* @return the File or null if not found
*/
File toLocalFile(Archive archive);
/**
* Get the URI to the remote archive
*
* @param archive the archive to calculate the URI for
* @return the URI for the given archive
*/
URI toRemoteURI(Archive archive) throws Exception;
/**
* Refresh the repository against the file system and remote repositories.
* Return true if there was a change
*/
boolean refresh() throws Exception;
/**
* Get the name of this repository
*
* @return the name
*/
String getName();
IPom getPom(InputStream pomFile) throws Exception;
IPom getPom(Revision revision) throws Exception;
List getSnapshotRepositories();
List getReleaseRepositories();
boolean isLocalOnly();
boolean exists(Archive binaryArchive) throws Exception;
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy