{"record":{"id":"1c674a76f2179367","repo":"apache/maven","slug":"error-installing-metadata","errorCode":null,"errorMessage":"Error installing metadata: {}","messagePattern":"Error installing metadata: (.+?)","errorType":"exception","errorClass":"RepositoryMetadataDeploymentException","httpStatus":null,"severity":"error","filePath":"compat/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java","lineNumber":417,"sourceCode":"\n            if (file.isFile()) {\n                try {\n                    fixTimestamp(file, readMetadata(file), repositoryMetadata.getMetadata());\n                } catch (RepositoryMetadataReadException e) {\n                    // will be reported via storeInlocalRepository\n                }\n            }\n        } else {\n            // It's a POM - we don't need to retrieve it first\n            file = new File(\n                    localRepository.getBasedir(),\n                    localRepository.pathOfLocalRepositoryMetadata(metadata, deploymentRepository));\n        }\n\n        try {\n            metadata.storeInLocalRepository(localRepository, deploymentRepository);\n        } catch (RepositoryMetadataStoreException e) {\n            throw new RepositoryMetadataDeploymentException(\"Error installing metadata: \" + e.getMessage(), e);\n        }\n\n        try {\n            wagonManager.putArtifactMetadata(file, metadata, deploymentRepository);\n        } catch (TransferFailedException e) {\n            throw new RepositoryMetadataDeploymentException(\"Error while deploying metadata: \" + e.getMessage(), e);\n        }\n    }\n\n    @Override\n    public void install(ArtifactMetadata metadata, ArtifactRepository localRepository)\n            throws RepositoryMetadataInstallationException {\n        try {\n            metadata.storeInLocalRepository(localRepository, localRepository);\n        } catch (RepositoryMetadataStoreException e) {\n            throw new RepositoryMetadataInstallationException(\"Error installing metadata: \" + e.getMessage(), e);\n        }\n    }","sourceCodeStart":399,"sourceCodeEnd":435,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/compat/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java#L399-L435","documentation":"During deploy(), after fetching previous metadata, Maven merges the new metadata into the local repository copy via metadata.storeInLocalRepository(...); a RepositoryMetadataStoreException there is wrapped as RepositoryMetadataDeploymentException with the store error appended to 'Error installing metadata'. It is a local-repository write/merge failure occurring immediately before the remote upload step.","triggerScenarios":"mvn deploy where the local maven-metadata.xml being merged is corrupt, the local repository directory is read-only or full, or a concurrent build holds/locks the metadata file while storeInLocalRepository writes it.","commonSituations":"~/.m2/repository owned by root after running Maven once with sudo; two CI jobs sharing one local repository; corrupt local metadata left by an earlier failed deploy.","solutions":["Act on the appended store error: fix permissions (chown -R) or free disk space on the local repository volume","Delete the local maven-metadata.xml for the artifact being deployed so the merge starts from a clean state","Give each concurrent build its own local repository via -Dmaven.repo.local=<dir>","Re-run mvn deploy once the local repository is writable and consistent"],"exampleFix":"# before: deploy fails merging metadata into root-owned local repo\nls -ld ~/.m2/repository/com/example/art\n# after: repair ownership and retry\nsudo chown -R $(id -u):$(id -g) ~/.m2/repository\nmvn deploy","handlingStrategy":"try-catch","validationCode":"File localMetadata = new File(localRepository.getBasedir(),\n        localRepository.pathOfLocalRepositoryMetadata(metadata, deploymentRepository));\nif (localMetadata.isFile() && !localMetadata.canWrite()) { /* repair permissions before deploy */ }\nif (!new File(localRepository.getBasedir()).canWrite()) { /* local repo read-only */ }","typeGuard":null,"tryCatchPattern":"Catch RepositoryMetadataDeploymentException and use the message prefix to route the fix: 'Error installing metadata' = local repository problem (permissions/corrupt merge/disk); 'Error while deploying metadata' = remote upload problem.","preventionTips":["Never run Maven under sudo against a user-owned local repository.","Isolate local repositories per concurrent CI job (-Dmaven.repo.local).","Delete partial maven-metadata.xml files after interrupted deploys before the next attempt."],"tags":["maven","deploy","metadata","local-repository","write"],"backgroundTag":"local-metadata-write-failed","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-22T04:17:13.399Z"}