{"record":{"id":"85e63b9df164fb2c","repo":"apache/maven","slug":"skipping-repository-url-containing-an","errorCode":null,"errorMessage":"Skipping repository '{}' (url: '{}') containing an uninterpolated property expression","messagePattern":"Skipping repository '(.+?)' \\(url: '(.+?)'\\) containing an uninterpolated property expression","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java","lineNumber":96,"sourceCode":"            MavenRepositorySystem repositorySystem,\n            MavenPluginManager pluginManager) {\n        this.classRealmManager = classRealmManager;\n        this.projectRealmCache = projectRealmCache;\n        this.repositorySystem = repositorySystem;\n        this.pluginManager = pluginManager;\n    }\n\n    @Override\n    public List<ArtifactRepository> createArtifactRepositories(\n            List<Repository> pomRepositories,\n            List<ArtifactRepository> externalRepositories,\n            ProjectBuildingRequest request)\n            throws InvalidRepositoryException {\n        List<ArtifactRepository> internalRepositories = new ArrayList<>();\n\n        for (Repository repository : pomRepositories) {\n            if (containsExpression(repository.getId()) || containsExpression(repository.getUrl())) {\n                logger.warn(\n                        \"Skipping repository '{}' (url: '{}') containing an uninterpolated property expression\",\n                        repository.getId(),\n                        repository.getUrl());\n                continue;\n            }\n            internalRepositories.add(MavenRepositorySystem.buildArtifactRepository(repository));\n        }\n\n        repositorySystem.injectMirror(request.getRepositorySession(), internalRepositories);\n\n        repositorySystem.injectProxy(request.getRepositorySession(), internalRepositories);\n\n        repositorySystem.injectAuthentication(request.getRepositorySession(), internalRepositories);\n\n        List<ArtifactRepository> dominantRepositories;\n        List<ArtifactRepository> recessiveRepositories;\n\n        if (ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT.equals(request.getRepositoryMerging())) {","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java#L78-L114","documentation":"During conversion of POM <repositories> into ArtifactRepository objects, Maven found a repository whose id or url still contains a literal ${...} property expression after model interpolation. Because an uninterpolated URL would produce garbage download requests, the repository is skipped entirely and its artifacts are resolved only from the remaining repositories. This is logged once per offending repository. It almost always means the property that should define the URL is undefined in the context where the POM was interpolated.","triggerScenarios":"ProjectBuildingHelper.createArtifactRepositories() runs on every project whose effective model declares <repository> entries with ${...} in <id> or <url>, and the referenced property is not defined: the property lives in a <profile> that was not activated, in a parent that failed to build (see the swallowed-parent warning), or the property name is misspelled.","commonSituations":"Repository URL defined as ${repo.url} with the property only inside an environment-specific profile that CI does not activate; property defined in a profile activated by JDK presence that changed after a Java upgrade; typo in the property name; property supplied only via settings.xml profile while the POM assumes it.","solutions":["Run mvn help:effective-pom -Doutput=effective.xml and inspect the <repositories> section for the leftover ${...} placeholder","Define the property in the POM <properties>, or activate the profile that defines it (mvn -P<profileId>)","If the property comes from settings.xml, verify the settings profile is active (mvn help:active-profiles)","As a last resort hardcode the repository URL to unblock the build"],"exampleFix":"<!-- before: property only exists in a non-activated profile -->\n<repositories>\n  <repository>\n    <id>internal</id>\n    <url>${internal.repo.url}</url>\n  </repository>\n</repositories>\n\n<!-- after: property always defined in the POM -->\n<properties>\n  <internal.repo.url>https://repo.example.com/maven</internal.repo.url>\n</properties>\n<repositories>\n  <repository>\n    <id>internal</id>\n    <url>${internal.repo.url}</url>\n  </repository>\n</repositories>","handlingStrategy":"validation","validationCode":"// Fail fast on uninterpolated repository coordinates before resolution starts\nfor (org.apache.maven.model.Repository repo : project.getModel().getRepositories()) {\n    if (repo.getUrl() != null && repo.getUrl().contains(\"${\")\n            || repo.getId() != null && repo.getId().contains(\"${\")) {\n        throw new IllegalStateException(\n            \"Repository \" + repo.getId() + \" has uninterpolated url \" + repo.getUrl()\n            + \" -> it will be skipped; define the property or activate its profile\");\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Define repository URL properties in unconditionally active <properties>, not only inside profiles","Run mvn help:effective-pom in CI and grep the <repositories> block for '${' to catch placeholders","Keep environment-specific repository configuration in settings.xml mirror entries rather than POM properties"],"tags":["maven","repository","interpolation","pom-properties"],"backgroundTag":"unresolved-maven-property","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}