apply plugin: "java" apply plugin: "maven" group = "myorg" version = 1.0 repositories { mavenCentral() } sourceSets.all { set -> def jarTask = task("${set.name}Jar", type: Jar) { baseName = baseName + "-$set.name" from set.output } artifacts { archives jarTask } } sourceSets { api impl } dependencies { apiCompile 'commons-codec:commons-codec:1.5' implCompile sourceSets.api.output implCompile 'commons-lang:commons-lang:2.6' testCompile 'junit:junit:4.12' testCompile sourceSets.api.output testCompile sourceSets.impl.output runtime configurations.apiRuntime runtime configurations.implRuntime } jar { from sourceSets.api.output from sourceSets.impl.output } uploadArchives { repositories { mavenDeployer { repository(url: uri("${buildDir}/repo")) addFilter("main") { artifact, file -> artifact.name == project.name } ["api", "impl"].each { type -> addFilter(type) { artifact, file -> artifact.name.endsWith("-$type") } // We now have to map our configurations to the correct maven scope for each pom ["compile", "runtime"].each { scope -> configuration = configurations[type + scope.capitalize()] ["main", type].each { pomName -> pom(pomName).scopeMappings.addMapping 1, configuration, scope } } } } } }