Maven Artifact API provides core interfaces and classes for representing and working with Maven artifacts, including version handling, repository interactions, and metadata management
npx @tessl/cli install tessl/maven-org-apache-maven--maven-artifact@3.9.0Maven Artifact API provides core interfaces and classes for representing, manipulating, and managing software artifacts within the Maven ecosystem. It includes comprehensive version handling capabilities, repository interaction APIs, and metadata management functionality.
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.9.11</version>
</dependency>import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.maven.artifact.versioning.VersionRange;import org.apache.maven.artifact.*;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.versioning.*;
// Create a new artifact (Note: Use your ArtifactHandler implementation)
// ArtifactHandler handler = new YourArtifactHandler("jar");
Artifact artifact = new DefaultArtifact(
"org.example", // groupId
"my-library", // artifactId
"1.0.0", // version
Artifact.SCOPE_COMPILE, // scope
"jar", // type
null, // classifier
handler // artifact handler
);
// Work with versions
ComparableVersion version1 = new ComparableVersion("1.2.3");
ComparableVersion version2 = new ComparableVersion("1.2.4");
int comparison = version1.compareTo(version2); // Returns -1
// Create version ranges
VersionRange range = VersionRange.createFromVersionSpec("[1.0,2.0)");
boolean matches = range.containsVersion(new DefaultArtifactVersion("1.5"));
// Use utilities
String key = ArtifactUtils.key(artifact);
boolean isSnapshot = ArtifactUtils.isSnapshot("1.0-SNAPSHOT");The Maven Artifact API is organized around several key concepts:
Core artifact representation and utility operations for Maven artifact identity and manipulation.
public interface Artifact extends Comparable<Artifact> {
// Identity methods
String getGroupId();
void setGroupId(String groupId);
String getArtifactId();
void setArtifactId(String artifactId);
String getVersion();
void setVersion(String version);
String getType();
String getClassifier();
boolean hasClassifier();
String getScope();
void setScope(String scope);
// File operations
File getFile();
void setFile(File destination);
// Version management
String getBaseVersion();
void setBaseVersion(String baseVersion);
VersionRange getVersionRange();
void setVersionRange(VersionRange newRange);
void selectVersion(String version);
ArtifactVersion getSelectedVersion() throws OverConstrainedVersionException;
boolean isSelectedVersionKnown() throws OverConstrainedVersionException;
List<ArtifactVersion> getAvailableVersions();
void setAvailableVersions(List<ArtifactVersion> versions);
// Repository operations
ArtifactRepository getRepository();
void setRepository(ArtifactRepository remoteRepository);
void updateVersion(String version, ArtifactRepository localRepository);
String getDownloadUrl();
void setDownloadUrl(String downloadUrl);
// Metadata management
void addMetadata(ArtifactMetadata metadata);
Collection<ArtifactMetadata> getMetadataList();
// Dependency management
List<String> getDependencyTrail();
void setDependencyTrail(List<String> dependencyTrail);
ArtifactFilter getDependencyFilter();
void setDependencyFilter(ArtifactFilter artifactFilter);
// Artifact handling
ArtifactHandler getArtifactHandler();
void setArtifactHandler(ArtifactHandler handler);
// Status management
String getId();
String getDependencyConflictId();
boolean isSnapshot();
void setResolved(boolean resolved);
boolean isResolved();
void setResolvedVersion(String version);
boolean isRelease();
void setRelease(boolean release);
boolean isOptional();
void setOptional(boolean optional);
}public class DefaultArtifact implements Artifact {
public DefaultArtifact(String groupId, String artifactId, String version,
String scope, String type, String classifier,
ArtifactHandler artifactHandler);
public DefaultArtifact(String groupId, String artifactId, VersionRange versionRange,
String scope, String type, String classifier,
ArtifactHandler artifactHandler);
public DefaultArtifact(String groupId, String artifactId, VersionRange versionRange,
String scope, String type, String classifier,
ArtifactHandler artifactHandler, boolean optional);
}public final class ArtifactUtils {
public static boolean isSnapshot(String version);
public static String toSnapshotVersion(String version);
public static String versionlessKey(Artifact artifact);
public static String versionlessKey(String groupId, String artifactId);
public static String key(Artifact artifact);
public static String key(String groupId, String artifactId, String version);
public static Map<String, Artifact> artifactMapByVersionlessId(Collection<Artifact> artifacts);
public static Artifact copyArtifactSafe(Artifact artifact);
public static Artifact copyArtifact(Artifact artifact);
public static <T extends Collection<Artifact>> T copyArtifacts(Collection<Artifact> from, T to);
public static <K, T extends Map<K, Artifact>> T copyArtifacts(Map<K, ? extends Artifact> from, T to);
}Configuration for different artifact types and their handling characteristics.
public interface ArtifactHandler {
String getExtension();
String getClassifier();
String getDirectory();
String getPackaging();
String getLanguage();
boolean isIncludesDependencies();
boolean isAddedToClasspath();
}public class InvalidArtifactRTException extends RuntimeException {
public InvalidArtifactRTException(String groupId, String artifactId, String version, String type, String message);
public InvalidArtifactRTException(String groupId, String artifactId, String version, String type, String message, Throwable cause);
public String getGroupId();
public String getArtifactId();
public String getVersion();
public String getType();
public String getBaseMessage();
public String getArtifactKey();
public String getMessage();
}Advanced version parsing, comparison, and range operations for Maven version semantics.
public class ComparableVersion implements Comparable<ComparableVersion> {
public ComparableVersion(String version);
public int compareTo(ComparableVersion other);
public String getCanonical();
public static void main(String... args); // CLI utility
}public class VersionRange {
public static VersionRange createFromVersionSpec(String spec)
throws InvalidVersionSpecificationException;
public static VersionRange createFromVersion(String version);
public boolean containsVersion(ArtifactVersion version);
public ArtifactVersion matchVersion(List<ArtifactVersion> versions);
public VersionRange restrict(VersionRange restriction)
throws OverConstrainedVersionException;
}Repository configuration, authentication, and metadata management for artifact storage and retrieval.
@Deprecated
public interface ArtifactRepository {
String pathOf(Artifact artifact);
String getUrl();
void setUrl(String url);
String getId();
void setId(String id);
Authentication getAuthentication();
void setAuthentication(Authentication authentication);
Proxy getProxy();
void setProxy(Proxy proxy);
}public class Authentication {
public Authentication(String userName, String password);
public String getUsername();
public void setUsername(String username);
public String getPassword();
public void setPassword(String password);
public String getPrivateKey();
public void setPrivateKey(String privateKey);
}Exception handling and filtering mechanisms for dependency resolution workflows.
public abstract class AbstractArtifactResolutionException extends Exception {
public Artifact getArtifact();
public String getGroupId();
public String getArtifactId();
public String getVersion();
public List<ArtifactRepository> getRemoteRepositories();
}public interface ArtifactFilter {
boolean include(Artifact artifact);
}public interface Artifact {
String SCOPE_COMPILE = "compile";
String SCOPE_TEST = "test";
String SCOPE_RUNTIME = "runtime";
String SCOPE_PROVIDED = "provided";
String SCOPE_SYSTEM = "system";
String SCOPE_IMPORT = "import";
}public interface Artifact {
String RELEASE_VERSION = "RELEASE";
String LATEST_VERSION = "LATEST";
String SNAPSHOT_VERSION = "SNAPSHOT";
Pattern VERSION_FILE_PATTERN = Pattern.compile("^(.*)-(\\d{8}\\.\\d{6})-(\\d+)$");
}public interface Artifact {
String SCOPE_COMPILE_PLUS_RUNTIME = "compile+runtime";
String SCOPE_RUNTIME_PLUS_SYSTEM = "runtime+system";
}Several components in this API are marked as deprecated:
The core artifact and versioning APIs remain stable and are not deprecated.