Per-directory local and remote repository metadata handling for Maven repositories
npx @tessl/cli install tessl/maven-maven-repository-metadata@3.9.0Maven Repository Metadata provides a data model and processing logic for Maven repository metadata files (repository-metadata.xml) that exist in Maven repositories at the directory level. It defines the structure for three types of directory metadata: groupId level (containing plugin information), groupId/artifactId level (containing versioning information), and groupId/artifactId/version level (containing snapshot-specific information).
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-repository-metadata</artifactId>
<version>3.9.11</version>
</dependency>import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.Versioning;
import org.apache.maven.artifact.repository.metadata.Snapshot;
import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
import org.apache.maven.artifact.repository.metadata.Plugin;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.Versioning;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
import java.io.FileReader;
import java.io.FileWriter;
// Reading metadata from XML file
MetadataXpp3Reader reader = new MetadataXpp3Reader();
Metadata metadata = reader.read(new FileReader("repository-metadata.xml"));
// Creating new metadata programmatically
Metadata newMetadata = new Metadata();
newMetadata.setGroupId("com.example");
newMetadata.setArtifactId("my-library");
Versioning versioning = new Versioning();
versioning.addVersion("1.0.0");
versioning.addVersion("1.1.0");
versioning.setLatest("1.1.0");
versioning.setRelease("1.1.0");
versioning.updateTimestamp();
newMetadata.setVersioning(versioning);
// Merging metadata from different sources
boolean changed = existingMetadata.merge(newMetadata);
// Writing metadata to XML file
MetadataXpp3Writer writer = new MetadataXpp3Writer();
writer.write(new FileWriter("output-metadata.xml"), metadata);The library is built around several key components:
Central data model classes for representing repository metadata structure and managing metadata at different directory levels.
// Root metadata class
class Metadata implements Serializable, Cloneable {
public String getGroupId();
public String getArtifactId();
public String getVersion();
public Versioning getVersioning();
public List<Plugin> getPlugins();
public boolean merge(Metadata sourceMetadata);
}
// Version management
class Versioning implements Serializable, Cloneable {
public String getLatest();
public String getRelease();
public List<String> getVersions();
public String getLastUpdated();
public Snapshot getSnapshot();
public List<SnapshotVersion> getSnapshotVersions();
public void updateTimestamp();
}Comprehensive snapshot artifact handling for SNAPSHOT versions, including build numbers, timestamps, and sub-artifact tracking.
class Snapshot implements Serializable, Cloneable {
public String getTimestamp();
public int getBuildNumber();
public boolean isLocalCopy();
}
class SnapshotVersion implements Serializable, Cloneable {
public String getClassifier();
public String getExtension();
public String getVersion();
public String getUpdated();
}Plugin mapping information for groupId-level metadata, enabling Maven plugin resolution by prefix.
class Plugin implements Serializable, Cloneable {
public String getName();
public String getPrefix();
public String getArtifactId();
}XML reading and writing capabilities for repository metadata files with flexible parsing options and content transformation.
class MetadataXpp3Reader {
public Metadata read(InputStream in) throws IOException, XmlPullParserException;
public Metadata read(Reader reader, boolean strict) throws IOException, XmlPullParserException;
}
class MetadataXpp3Writer {
public void write(Writer writer, Metadata metadata) throws IOException;
public void write(OutputStream out, Metadata metadata) throws IOException;
}// Content transformation interface for XML reading (nested in MetadataXpp3Reader)
public static interface ContentTransformer {
String transform(String source, String fieldName);
}