{"record":{"id":"2d9b2cb52e31aebe","repo":"gradle/gradle","slug":"duplicate-configuration-for-repository-name","errorCode":null,"errorMessage":"Duplicate configuration for repository '<name>'.","messagePattern":"Duplicate configuration for repository '<name>'\\.","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"platforms/jvm/toolchains-jvm/src/main/java/org/gradle/jvm/toolchain/internal/DefaultJavaToolchainRepositoryHandler.java","lineNumber":102,"sourceCode":"        }\n    }\n\n    @Override\n    public void repository(String name, Action<? super JavaToolchainRepository> configureAction) {\n        assertMutable();\n\n        DefaultAuthenticationContainer authenticationContainer = new DefaultAuthenticationContainer(instantiator, CollectionCallbackActionDecorator.NOOP);\n        for (Map.Entry<Class<Authentication>, Class<? extends Authentication>> e : authenticationSchemeRegistry.getRegisteredSchemes().entrySet()) {\n            authenticationContainer.registerBinding(e.getKey(), e.getValue());\n        }\n        AuthenticationSupporter authenticationSupporter = new AuthenticationSupporter(instantiator, objectFactory, authenticationContainer, providerFactory);\n\n        DefaultJavaToolchainRepository repository = objectFactory.newInstance(DefaultJavaToolchainRepository.class, name, authenticationContainer, authenticationSupporter, providerFactory);\n        configureAction.execute(repository);\n\n        boolean isNew = repositories.add(repository);\n        if (!isNew) {\n            throw new GradleException(\"Duplicate configuration for repository '\" + name + \"'.\");\n        }\n    }\n\n    @Override\n    public List<JavaToolchainRepository> getAsList() {\n        ArrayList<JavaToolchainRepository> copy = repositories.stream()\n                .map(it -> (JavaToolchainRepositoryInternal) it)\n                .map(ImmutableJavaToolchainRepository::new)\n                .collect(Collectors.toCollection(ArrayList::new));\n        return Collections.unmodifiableList(copy);\n    }\n\n    @Override\n    public int size() {\n        return repositories.size();\n    }\n\n    @Override","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/gradle/gradle/blob/534f27719b66953f95cc907aae7f2c1b12f5482d/platforms/jvm/toolchains-jvm/src/main/java/org/gradle/jvm/toolchain/internal/DefaultJavaToolchainRepositoryHandler.java#L84-L120","documentation":"DefaultJavaToolchainRepositoryHandler.configureRepository creates the repository and adds it to a Set; DefaultJavaToolchainRepository equality is keyed by name, so repositories.add returning false means a repository with that name was already configured, and the duplicate declaration throws GradleException 'Duplicate configuration for repository <name>'.","triggerScenarios":"Two declareRepository blocks (or a settings plugin plus the settings script) declare repositories with the same name under toolchainManagement.repositories in settings evaluation.","commonSituations":"Copying an example block and forgetting to rename it; a convention/settings plugin and the local settings.gradle.kts both declaring 'myRepo'; refactoring that accidentally left the old block in place.","solutions":["Give each repository declaration a unique name in toolchainManagement.repositories","Check settings plugins you apply - one of them may already declare the same repository name","Consolidate the duplicate declarations into a single block (or move ownership fully into the plugin)"],"exampleFix":"// before - settings.gradle.kts declares 'nexus' twice\nrepositories { nexus { ... } }\nrepositories { nexus { ... } }  // Duplicate configuration\n\n// after\nrepositories { nexus { ... } }\nrepositories { vendorMirror { ... } }","handlingStrategy":"validation","validationCode":"// settings lint: no duplicate repository declarations\ndef names = []\nsettings.toolchainManagement.repositories.getAsList().each { names << it.name }\nassert names == names.toUnique().toList() : 'duplicate toolchain repository names'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a naming convention for toolchain repositories (e.g. <vendor>-mirror)","Review which settings plugins declare repositories before adding local ones","Centralize repository declarations in one settings plugin"],"tags":["gradle","java-toolchain","repositories","settings","duplicate"],"backgroundTag":"duplicate-repository-definition","analyzedSha":"534f27719b66953f95cc907aae7f2c1b12f5482d","analyzedAt":"2026-08-22T08:09:12.375Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}