apache/maven · warning · RepositoryMetadataStoreException
Error updating group repository metadata
Error message
Error updating group repository metadata
What it means
SimplexTransferListener fans TransferEvents out to worker threads; its switch over TransferEvent.EventType handles only STARTED, PROGRESSED, CORRUPTED, SUCCEEDED, and FAILED. A constant not covered (added by a newer maven-resolver-api than the listener was compiled against, or emitted by a custom event producer) falls into default and is dropped with this warning, so progress state for that event never reaches the delegate.
Source
Thrown at compat/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java:66
}
@Override
public String getRemoteFilename() {
return "maven-metadata.xml";
}
@Override
public String getLocalFilename(ArtifactRepository repository) {
return "maven-metadata-" + repository.getKey() + ".xml";
}
@Override
public void storeInLocalRepository(ArtifactRepository localRepository, ArtifactRepository remoteRepository)
throws RepositoryMetadataStoreException {
try {
updateRepositoryMetadata(localRepository, remoteRepository);
} catch (IOException | XMLStreamException e) {
throw new RepositoryMetadataStoreException("Error updating group repository metadata", e);
}
}
protected void updateRepositoryMetadata(ArtifactRepository localRepository, ArtifactRepository remoteRepository)
throws IOException, XMLStreamException {
Metadata metadata = null;
File metadataFile = new File(
localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata(this, remoteRepository));
if (metadataFile.length() == 0) {
if (!metadataFile.delete()) {
// sleep for 10ms just in case this is windows holding a file lock
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// ignore
}View on GitHub (pinned to e4093d4e12)
Solutions
- Align the maven-resolver-* versions with your Maven/embedder version via dependencyManagement
- Upgrade Maven or the embedder so SimplexTransferListener knows the newer event types
- If you produce TransferEvents yourself, emit only the five standard constants
Defensive patterns
Strategy: type-guard
Type guard
private static void dispatch(TransferEvent e, TransferListener delegate) {
switch (e.getType()) {
case STARTED -> delegate.transferStarted(e);
case PROGRESSED -> delegate.transferProgressed(e);
case CORRUPTED -> delegate.transferCorrupted(e);
case SUCCEEDED -> delegate.transferSucceeded(e);
case FAILED -> delegate.transferFailed(e);
// constants from newer resolver versions: deliberately ignored
}
} Prevention
- Pin the full maven-resolver-* set that matches your Maven version in dependencyManagement
- Upgrade Maven and resolver together, never independently
- Avoid registering SimplexTransferListener from custom extensions
When it happens
Trigger: Version skew between the maven-resolver-api on the classpath and the maven-embedder/CLI version hosting the listener, or a custom TransferListener pipeline forwarding unknown enum constants.
Common situations: Embedding Maven with a different resolver version pinned in dependencyManagement; extensions shading or overriding resolver artifacts; early-adopter resolver versions adding new event types.
Related errors
- The version cannot be empty.
- Unbounded range: {}
- Ranges overlap: {}
- Only fully-qualified sets allowed in multiple set scenario:
- Single version must be surrounded by []: {}
AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21).
Data as JSON: /api/errors/0ea567bb01ea9848.
Report an issue: GitHub.