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

  1. Align the maven-resolver-* versions with your Maven/embedder version via dependencyManagement
  2. Upgrade Maven or the embedder so SimplexTransferListener knows the newer event types
  3. 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

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


AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21). Data as JSON: /api/errors/0ea567bb01ea9848. Report an issue: GitHub.