{"record":{"id":"a68f07fe5c5892c2","repo":"apache/maven","slug":"unable-to-determine-the-release-version","errorCode":null,"errorMessage":"Unable to determine the release version","messagePattern":"Unable to determine the release version","errorType":"exception","errorClass":"ArtifactNotFoundException","httpStatus":null,"severity":"error","filePath":"compat/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java","lineNumber":51,"sourceCode":"\n/**\n * Change the version <code>RELEASE</code> to the appropriate release version from the remote repository.\n *\n */\n@Named(\"release\")\n@Singleton\n@Deprecated\npublic class ReleaseArtifactTransformation extends AbstractVersionTransformation {\n\n    @Override\n    public void transformForResolve(Artifact artifact, RepositoryRequest request)\n            throws ArtifactResolutionException, ArtifactNotFoundException {\n        if (Artifact.RELEASE_VERSION.equals(artifact.getVersion())) {\n            try {\n                String version = resolveVersion(artifact, request);\n\n                if (Artifact.RELEASE_VERSION.equals(version)) {\n                    throw new ArtifactNotFoundException(\"Unable to determine the release version\", artifact);\n                }\n\n                artifact.setBaseVersion(version);\n                artifact.updateVersion(version, request.getLocalRepository());\n            } catch (RepositoryMetadataResolutionException e) {\n                throw new ArtifactResolutionException(e.getMessage(), artifact, e);\n            }\n        }\n    }\n\n    @Override\n    public void transformForInstall(Artifact artifact, ArtifactRepository localRepository) {\n        ArtifactMetadata metadata = createMetadata(artifact);\n\n        artifact.addMetadata(metadata);\n    }\n\n    @Override","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/compat/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java#L33-L69","documentation":"ReleaseArtifactTransformation.transformForResolve handles artifacts whose literal version is 'RELEASE'. It resolves a concrete release version from repository metadata; if resolveVersion still returns 'RELEASE', no usable release versioning metadata was found and ArtifactNotFoundException('Unable to determine the release version') is thrown. Unreadable metadata (RepositoryMetadataResolutionException) is instead surfaced as ArtifactResolutionException with the underlying message.","triggerScenarios":"A dependency or plugin declared with <version>RELEASE</version> where no repository provides maven-metadata.xml with release versioning for the artifact — never-deployed artifact, unreachable repository, or metadata listing only snapshots.","commonSituations":"Templates or old docs using the RELEASE metaversions; artifacts published only to snapshot repositories; corporate mirrors that fail to merge versioning metadata; offline CI agents without cached metadata.","solutions":["Pin an explicit release version instead of RELEASE to make the build reproducible","Verify the artifact exists in a release repository and its maven-metadata.xml <versioning><release> is populated","Run mvn -U once online to refresh metadata, then retry","If you maintain the artifact, run a release deployment so release metadata is generated"],"exampleFix":"<!-- before -->\n<version>RELEASE</version>\n\n<!-- after -->\n<version>1.4.2</version>","handlingStrategy":"validation","validationCode":"import org.apache.maven.artifact.Artifact;\n\nboolean isReleaseMetaversion(Artifact a) {\n    return Artifact.RELEASE_VERSION.equals(a.getVersion());\n}\n\nif (isReleaseMetaversion(artifact)) {\n    throw new IllegalArgumentException(\n        \"RELEASE metaversion is non-reproducible and needs release metadata; pin a version for \"\n            + artifact.getId());\n}","typeGuard":null,"tryCatchPattern":"try {\n    transformer.transformForResolve(artifact, request);\n} catch (ArtifactNotFoundException e) {\n    if (\"Unable to determine the release version\".equals(e.getMessage())) {\n        advisePinning(artifact); // replace RELEASE with a concrete released version\n    } else {\n        throw e;\n    }\n}","preventionTips":["Prefer explicit released versions recorded via dependencyManagement","Publish release metadata by running a real release deploy (not only snapshot deploys) when others depend on your artifact","Enforce a no-metaversion policy with maven-enforcer-plugin requireReleaseDeps where reproducibility matters"],"tags":["maven","version-resolution","release","metadata","legacy-compat"],"backgroundTag":"unresolved-version-metadata","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}