String dirName = rootProject.projectDir.name rootProject.name = dirName List projects = [ 'build-tools', 'rest-api-spec', 'docs', 'client:rest', 'client:rest-high-level', 'client:sniffer', 'client:transport', 'client:test', 'client:client-benchmark-noop-api-plugin', 'client:benchmark', 'benchmarks', 'distribution:integ-test-zip', 'distribution:zip', 'distribution:tar', 'distribution:deb', 'distribution:rpm', 'distribution:tools:launchers', 'distribution:tools:plugin-cli', 'server', 'server:cli', 'test:framework', 'test:fixtures:example-fixture', 'test:fixtures:hdfs-fixture', 'test:fixtures:krb5kdc-fixture', 'test:fixtures:old-elasticsearch', 'test:logger-usage', 'libs:elasticsearch-core', 'libs:elasticsearch-nio', 'modules:aggs-matrix-stats', 'modules:analysis-common', 'modules:ingest-common', 'modules:lang-expression', 'modules:lang-mustache', 'modules:lang-painless', 'modules:mapper-extras', 'modules:parent-join', 'modules:percolator', 'modules:rank-eval', 'modules:reindex', 'modules:repository-url', 'modules:transport-netty4', 'modules:tribe', 'plugins:analysis-icu', 'plugins:analysis-kuromoji', 'plugins:analysis-phonetic', 'plugins:analysis-smartcn', 'plugins:analysis-stempel', 'plugins:analysis-ukrainian', 'plugins:discovery-azure-classic', 'plugins:discovery-ec2', 'plugins:discovery-file', 'plugins:discovery-gce', 'plugins:ingest-geoip', 'plugins:ingest-attachment', 'plugins:ingest-user-agent', 'plugins:mapper-murmur3', 'plugins:mapper-size', 'plugins:repository-azure', 'plugins:repository-gcs', 'plugins:repository-hdfs', 'plugins:repository-s3', 'plugins:jvm-example', 'plugins:store-smb', 'plugins:transport-nio', 'qa:auto-create-index', 'qa:ccs-unavailable-clusters', 'qa:evil-tests', 'qa:full-cluster-restart', 'qa:integration-bwc', 'qa:mixed-cluster', 'qa:multi-cluster-search', 'qa:no-bootstrap-tests', 'qa:reindex-from-old', 'qa:rolling-upgrade', 'qa:smoke-test-client', 'qa:smoke-test-http', 'qa:smoke-test-ingest-with-all-dependencies', 'qa:smoke-test-ingest-disabled', 'qa:smoke-test-multinode', 'qa:smoke-test-rank-eval-with-mustache', 'qa:smoke-test-plugins', 'qa:smoke-test-reindex-with-all-modules', 'qa:smoke-test-tribe-node', 'qa:vagrant', 'qa:verify-version-constants', 'qa:wildfly', 'qa:query-builder-bwc' ] projects.add("libs") File libsDir = new File(rootProject.projectDir, 'libs') for (File libDir : new File(rootProject.projectDir, 'libs').listFiles()) { if (libDir.isDirectory() == false) continue; if (libDir.name.startsWith('build') || libDir.name.startsWith('.')) continue; projects.add("libs:${libDir.name}".toString()) } /* Create projects for building BWC snapshot distributions from the heads of other branches */ final List branches = ['5.6', '6.0', '6.1', '6.x'] for (final String branch : branches) { projects.add("distribution:bwc-snapshot-${branch}".toString()) } boolean isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse') if (isEclipse) { // eclipse cannot handle an intermediate dependency between main and test, so we must create separate projects // for server-src and server-tests projects << 'server-tests' projects << 'libs:elasticsearch-nio-tests' } include projects.toArray(new String[0]) project(':build-tools').projectDir = new File(rootProject.projectDir, 'buildSrc') /* The BWC snapshot projects share the same build directory and build file, * but apply to different backwards compatibility branches. */ for (final String branch : branches) { project(":distribution:bwc-snapshot-${branch}").projectDir = new File(rootProject.projectDir, 'distribution/bwc') } if (isEclipse) { project(":server").projectDir = new File(rootProject.projectDir, 'server/src/main') project(":server").buildFileName = 'eclipse-build.gradle' project(":server-tests").projectDir = new File(rootProject.projectDir, 'server/src/test') project(":server-tests").buildFileName = 'eclipse-build.gradle' project(":libs:elasticsearch-nio").projectDir = new File(rootProject.projectDir, 'libs/elasticsearch-nio/src/main') project(":libs:elasticsearch-nio").buildFileName = 'eclipse-build.gradle' project(":libs:elasticsearch-nio-tests").projectDir = new File(rootProject.projectDir, 'libs/elasticsearch-nio/src/test') project(":libs:elasticsearch-nio-tests").buildFileName = 'eclipse-build.gradle' } /** * Iterates over sub directories, looking for build.gradle, and adds a project if found * for that dir with the given path prefix. Note that this requires each level * of the dir hierarchy to have a build.gradle. Otherwise we would have to iterate * all files/directories in the source tree to find all projects. */ void addSubProjects(String path, File dir, List projects, List branches) { if (dir.isDirectory() == false) return; if (dir.name == 'buildSrc') return; if (new File(dir, 'build.gradle').exists() == false) return; final String projectName = "${path}:${dir.name}" include projectName if (dir.name == 'bwc-snapshot-dummy-projects') { for (final String branch : branches) { final String snapshotProjectName = "${projectName}:bwc-snapshot-${branch}" projects.add(snapshotProjectName) include snapshotProjectName project("${snapshotProjectName}").projectDir = dir } // TODO do we want to assert that there's nothing else in the bwc directory? } else { if (path.isEmpty() || path.startsWith(':example-plugins')) { project(projectName).projectDir = dir } for (File subdir : dir.listFiles()) { addSubProjects(projectName, subdir, projects, branches) } } } // include example plugins File examplePluginsDir = new File(rootProject.projectDir, 'plugins/examples') for (File example : examplePluginsDir.listFiles()) { if (example.isDirectory() == false) continue; if (example.name.startsWith('build') || example.name.startsWith('.')) continue; addSubProjects(':example-plugins', example, projects, []) } project(':example-plugins').projectDir = new File(rootProject.projectDir, 'plugins/examples') // look for extra plugins for elasticsearch File extraProjects = new File(rootProject.projectDir.parentFile, "${dirName}-extra") if (extraProjects.exists()) { for (File extraProjectDir : extraProjects.listFiles()) { addSubProjects('', extraProjectDir, projects, branches) } } include 'libs'