class CopyJars extends DefaultTask { @InputFiles FileCollection source @OutputDirectory File destination @TaskAction void apply() { project.copy { from source into destination } } } class ExtractAars extends DefaultTask { @Input boolean extractJarsOnly = false @InputFiles FileCollection source @OutputDirectory File destination @TaskAction void apply() { source.each { File file -> def baseFilename = file.name.lastIndexOf('.').with { it != -1 ? file.name[0..< it] : file.name } if (extractJarsOnly) { project.copy { from project.zipTree(file) include 'classes.jar' into destination.name rename { String fileName -> fileName.replace('classes.jar', baseFilename + '.jar') } } } else { project.copy { from project.zipTree(file) exclude 'classes.jar' into destination.absolutePath + File.separator + baseFilename } project.copy { from project.zipTree(file) include 'classes.jar' into destination.absolutePath + File.separator + baseFilename + File.separator + destination.name rename { String fileName -> fileName.replace('classes.jar', baseFilename + '.jar') } } } } } } task ('copyJarDependenciesIntoLibs', type: CopyJars) { description = 'Used for Eclipse. Copies JAR dependencies to the libs directory.' destination = file(project.projectDir.canonicalPath + File.separator + 'libs') afterEvaluate { source = files( project.configurations.matching { it.name.endsWith 'Compile' or it.name == 'compile' }.each { logger.info "Adding dependencies from ${it.name} configuration." } ).filter { it.name.endsWith 'jar' } logger.info source.files.toString() } } task ('extractAarDependenciesIntoLibs', type: ExtractAars) { description = 'Used for Eclipse. Extracts AAR dependencies into the libs directory.' destination = file(project.projectDir.canonicalPath + File.separator + 'libs') afterEvaluate { source = files( project.configurations.matching { it.name.endsWith 'Compile' or it.name == 'compile' }.each { logger.info "Adding dependencies from ${it.name} configuration." } ).filter { it.name.endsWith 'aar' } logger.info source.files.toString() } } task copyDependenciesIntoLibs { dependsOn copyJarDependenciesIntoLibs, extractAarDependenciesIntoLibs description = 'Used for Eclipse. Copies JAR and extracts AAR dependencies into the libs ' + 'directory.' }