Maven Artifact API provides core interfaces and classes for representing and working with Maven artifacts, including version handling, repository interactions, and metadata management
—
Maven's repository operations provide abstractions for working with artifact repositories, including local and remote repositories, authentication, proxy configuration, and metadata management. Note that many of these interfaces are deprecated in favor of the Maven Resolver API, but remain functional for legacy compatibility.
Primary abstraction for artifact repositories with path resolution, policy management, and artifact operations.
@Deprecated
public interface ArtifactRepository {
// Path operations
String pathOf(Artifact artifact);
String pathOfRemoteRepositoryMetadata(ArtifactMetadata artifactMetadata);
String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, ArtifactRepository repository);
// Repository identification
String getUrl();
void setUrl(String url);
String getId();
void setId(String id);
String getBasedir();
String getProtocol();
String getKey();
// Repository policies
ArtifactRepositoryPolicy getSnapshots();
ArtifactRepositoryPolicy getReleases();
void setSnapshotUpdatePolicy(ArtifactRepositoryPolicy policy);
void setReleaseUpdatePolicy(ArtifactRepositoryPolicy policy);
// Layout management
ArtifactRepositoryLayout getLayout();
void setLayout(ArtifactRepositoryLayout layout);
// Authentication and proxy
Authentication getAuthentication();
void setAuthentication(Authentication authentication);
Proxy getProxy();
void setProxy(Proxy proxy);
// Artifact operations
Artifact find(Artifact artifact);
List<String> findVersions(Artifact artifact);
boolean isProjectAware();
// Repository mirroring (since 3.0-alpha-1)
List<ArtifactRepository> getMirroredRepositories();
void setMirroredRepositories(List<ArtifactRepository> mirroredRepositories);
// Repository blocking (since 3.8.1)
boolean isBlocked();
void setBlocked(boolean blocked);
}Usage Examples:
// Basic repository setup (deprecated approach)
ArtifactRepository repository = // obtained from configuration
repository.setId("central");
repository.setUrl("https://repo1.maven.org/maven2");
// Get artifact path in repository
String path = repository.pathOf(artifact); // e.g., "org/example/my-lib/1.0/my-lib-1.0.jar"
// Configure authentication
Authentication auth = new Authentication("username", "password");
repository.setAuthentication(auth);
// Set up proxy
Proxy proxy = new Proxy();
proxy.setHost("proxy.company.com");
proxy.setPort(8080);
repository.setProxy(proxy);Defines update and checksum policies for repository operations.
@Deprecated
public class ArtifactRepositoryPolicy {
// Update policy constants
public static final String UPDATE_POLICY_NEVER = "never";
public static final String UPDATE_POLICY_ALWAYS = "always";
public static final String UPDATE_POLICY_DAILY = "daily";
public static final String UPDATE_POLICY_INTERVAL = "interval";
// Checksum policy constants
public static final String CHECKSUM_POLICY_FAIL = "fail";
public static final String CHECKSUM_POLICY_WARN = "warn";
public static final String CHECKSUM_POLICY_IGNORE = "ignore";
// Policy methods
public boolean isEnabled();
public void setEnabled(boolean enabled);
public String getUpdatePolicy();
public void setUpdatePolicy(String updatePolicy);
public String getChecksumPolicy();
public void setChecksumPolicy(String checksumPolicy);
public boolean checkOutOfDate(Date lastModified);
public void merge(ArtifactRepositoryPolicy policy);
}Usage Examples:
// Create and configure repository policies
ArtifactRepositoryPolicy snapshotPolicy = new ArtifactRepositoryPolicy();
snapshotPolicy.setEnabled(true);
snapshotPolicy.setUpdatePolicy(ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY);
snapshotPolicy.setChecksumPolicy(ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN);
ArtifactRepositoryPolicy releasePolicy = new ArtifactRepositoryPolicy();
releasePolicy.setEnabled(true);
releasePolicy.setUpdatePolicy(ArtifactRepositoryPolicy.UPDATE_POLICY_NEVER);
releasePolicy.setChecksumPolicy(ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL);
// Apply to repository
repository.setSnapshotUpdatePolicy(snapshotPolicy);
repository.setReleaseUpdatePolicy(releasePolicy);
// Check if update is needed
boolean needsUpdate = snapshotPolicy.checkOutOfDate(lastDownloadTime);Repository authentication configuration for secure repository access.
public class Authentication {
public Authentication(String userName, String password);
// Basic authentication
public String getUsername();
public void setUsername(String username);
public String getPassword();
public void setPassword(String password);
// Private key authentication
public String getPrivateKey();
public void setPrivateKey(String privateKey);
public String getPassphrase();
public void setPassphrase(String passphrase);
}Usage Examples:
// Basic username/password authentication
Authentication basicAuth = new Authentication("myuser", "mypassword");
// Private key authentication
Authentication keyAuth = new Authentication("keyuser", null);
keyAuth.setPrivateKey("/path/to/private/key");
keyAuth.setPassphrase("keypassphrase");
// Apply to repository
repository.setAuthentication(basicAuth);Proxy server configuration for repository access through corporate proxies.
public class Proxy {
// Proxy type constants
public static final String PROXY_SOCKS5 = "SOCKS_5";
public static final String PROXY_SOCKS4 = "SOCKS4";
public static final String PROXY_HTTP = "HTTP";
// Basic proxy configuration
public String getHost();
public void setHost(String host);
public int getPort();
public void setPort(int port);
public String getProtocol();
public void setProtocol(String protocol);
// Proxy authentication
public String getUserName();
public void setUserName(String userName);
public String getPassword();
public void setPassword(String password);
// Proxy bypass configuration
public String getNonProxyHosts();
public void setNonProxyHosts(String nonProxyHosts);
// NTLM authentication
public String getNtlmHost();
public void setNtlmHost(String ntlmHost);
public String getNtlmDomain();
public void setNtlmDomain(String ntlmDomain);
}Usage Examples:
// HTTP proxy configuration
Proxy httpProxy = new Proxy();
httpProxy.setProtocol(Proxy.PROXY_HTTP);
httpProxy.setHost("proxy.company.com");
httpProxy.setPort(8080);
httpProxy.setUserName("proxyuser");
httpProxy.setPassword("proxypass");
httpProxy.setNonProxyHosts("localhost|127.0.0.1|*.internal.com");
// SOCKS proxy configuration
Proxy socksProxy = new Proxy();
socksProxy.setProtocol(Proxy.PROXY_SOCKS5);
socksProxy.setHost("socks.company.com");
socksProxy.setPort(1080);
// NTLM proxy authentication
httpProxy.setNtlmHost("workstation");
httpProxy.setNtlmDomain("CORPORATE");
// Apply to repository
repository.setProxy(httpProxy);Defines how artifacts are organized within repositories.
@Deprecated
public interface ArtifactRepositoryLayout {
String getId();
String pathOf(Artifact artifact);
String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata,
ArtifactRepository repository);
String pathOfRemoteRepositoryMetadata(ArtifactMetadata artifactMetadata);
}Extended repository layout interface with repository factory capabilities.
public interface ArtifactRepositoryLayout2 extends ArtifactRepositoryLayout {
ArtifactRepository newMavenArtifactRepository(String id, String url,
ArtifactRepositoryPolicy snapshots,
ArtifactRepositoryPolicy releases);
}Contains artifact metadata with merge capabilities.
@Deprecated
public interface ArtifactMetadata
extends org.apache.maven.repository.legacy.metadata.ArtifactMetadata {
void merge(ArtifactMetadata metadata);
}Legacy artifact metadata operations for storage and retrieval.
public interface ArtifactMetadata {
// Storage location queries
boolean storedInArtifactVersionDirectory();
boolean storedInGroupDirectory();
// Artifact identification
String getGroupId();
String getArtifactId();
String getBaseVersion();
Object getKey();
// File name resolution
String getLocalFilename(ArtifactRepository repository);
String getRemoteFilename();
// Operations
void merge(ArtifactMetadata metadata);
void storeInLocalRepository(ArtifactRepository localRepository,
ArtifactRepository remoteRepository)
throws RepositoryMetadataStoreException;
String extendedToString();
}Exception thrown when repository metadata storage operations fail.
public class RepositoryMetadataStoreException extends Exception {
public RepositoryMetadataStoreException(String message);
public RepositoryMetadataStoreException(String message, Exception cause);
}Common Scenarios:
Important: Most repository-related interfaces in this package are deprecated. For new projects, consider using:
However, these deprecated interfaces remain functional and are still used internally by Maven for backward compatibility.
// Basic repository setup (legacy approach)
ArtifactRepository centralRepo = // from configuration
centralRepo.setId("central");
centralRepo.setUrl("https://repo1.maven.org/maven2");
// Configure policies
ArtifactRepositoryPolicy releases = new ArtifactRepositoryPolicy();
releases.setEnabled(true);
releases.setUpdatePolicy(ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY);
centralRepo.setReleaseUpdatePolicy(releases);// Set up authenticated repository with proxy
Authentication auth = new Authentication("username", "password");
Proxy proxy = new Proxy();
proxy.setHost("proxy.company.com");
proxy.setPort(8080);
proxy.setProtocol(Proxy.PROXY_HTTP);
ArtifactRepository secureRepo = // from configuration
secureRepo.setAuthentication(auth);
secureRepo.setProxy(proxy);// Configure repository mirrors
List<ArtifactRepository> mirrors = Arrays.asList(mirror1, mirror2);
repository.setMirroredRepositories(mirrors);
// Block problematic repositories (Maven 3.8.1+)
repository.setBlocked(true);Install with Tessl CLI
npx tessl i tessl/maven-org-apache-maven--maven-artifact