Merge pull request #14592 from rjernst/eclipse_cycles

Build: Fix eclipse generation to add a core-tests projects
This commit is contained in:
Ryan Ernst 2015-11-06 11:55:47 -08:00
commit 59a1cda9bb
5 changed files with 63 additions and 30 deletions

View File

@ -97,13 +97,14 @@ allprojects {
randomizedrunner: '2.2.0', randomizedrunner: '2.2.0',
httpclient: '4.3.6' httpclient: '4.3.6'
] ]
// for eclipse hacks...
isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse')
} }
} }
subprojects { subprojects {
repositories { repositories {
// Uncomment the following line to first resolve against the maven local repo. This is useful for eclipse users who want to work on test-framework.
// mavenLocal()
mavenCentral() mavenCentral()
maven { maven {
name 'sonatype-snapshots' name 'sonatype-snapshots'
@ -137,12 +138,7 @@ subprojects {
dependencySubstitution { dependencySubstitution {
substitute module("org.elasticsearch:rest-api-spec:${version}") with project("${projectsPrefix}:rest-api-spec") substitute module("org.elasticsearch:rest-api-spec:${version}") with project("${projectsPrefix}:rest-api-spec")
substitute module("org.elasticsearch:elasticsearch:${version}") with project("${projectsPrefix}:core") substitute module("org.elasticsearch:elasticsearch:${version}") with project("${projectsPrefix}:core")
// so that eclipse doesn't have circular references
// the downside is, if you hack on test-framework, you have to gradle install
// the first prop detects eclipse itself, the second detects eclipse from commandline
if (System.getProperty("eclipse.launcher") == null && gradle.startParameter.taskNames.contains('eclipse') == false) {
substitute module("org.elasticsearch:test-framework:${version}") with project("${projectsPrefix}:test-framework") substitute module("org.elasticsearch:test-framework:${version}") with project("${projectsPrefix}:test-framework")
}
substitute module("org.elasticsearch.distribution.zip:elasticsearch:${version}") with project("${projectsPrefix}:distribution:zip") substitute module("org.elasticsearch.distribution.zip:elasticsearch:${version}") with project("${projectsPrefix}:distribution:zip")
substitute module("org.elasticsearch.distribution.tar:elasticsearch:${version}") with project("${projectsPrefix}:distribution:tar") substitute module("org.elasticsearch.distribution.tar:elasticsearch:${version}") with project("${projectsPrefix}:distribution:tar")
} }

View File

@ -89,11 +89,26 @@ dependencies {
compile 'net.java.dev.jna:jna:4.1.0', optional compile 'net.java.dev.jna:jna:4.1.0', optional
if (isEclipse == false || project.path == "${projectsPrefix}:core-tests") {
testCompile("org.elasticsearch:test-framework:${version}") { testCompile("org.elasticsearch:test-framework:${version}") {
// tests use the locally compiled version of core // tests use the locally compiled version of core
exclude group: 'org.elasticsearch', module: 'elasticsearch' exclude group: 'org.elasticsearch', module: 'elasticsearch'
} }
} }
}
if (isEclipse) {
// in eclipse the project is under a fake root, we need to change around the source sets
sourceSets {
if (project.path == "${projectsPrefix}:core") {
main.java.srcDirs = ['java']
main.resources.srcDirs = ['resources']
} else {
test.java.srcDirs = ['java']
test.resources.srcDirs = ['resources']
}
}
}
compileJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked" compileJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked"
compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked" compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked"
@ -104,6 +119,7 @@ forbiddenPatterns {
exclude '**/org/elasticsearch/cluster/routing/shard_routes.txt' exclude '**/org/elasticsearch/cluster/routing/shard_routes.txt'
} }
if (isEclipse == false || project.path == "${projectsPrefix}:core-tests") {
task integTest(type: RandomizedTestingTask, task integTest(type: RandomizedTestingTask,
group: JavaBasePlugin.VERIFICATION_GROUP, group: JavaBasePlugin.VERIFICATION_GROUP,
description: 'Multi-node tests', description: 'Multi-node tests',
@ -119,4 +135,5 @@ integTest.mustRunAfter test
RestSpecHack.configureDependencies(project) RestSpecHack.configureDependencies(project)
Task copyRestSpec = RestSpecHack.configureTask(project, true) Task copyRestSpec = RestSpecHack.configureTask(project, true)
integTest.dependsOn copyRestSpec integTest.dependsOn copyRestSpec
}

View File

@ -0,0 +1,3 @@
// this is just shell gradle file for eclipse to have separate projects for core src and tests
apply from: '../../build.gradle'

View File

@ -0,0 +1,7 @@
// this is just shell gradle file for eclipse to have separate projects for core src and tests
apply from: '../../build.gradle'
dependencies {
testCompile project("${projectsPrefix}:core")
}

View File

@ -1,6 +1,6 @@
rootProject.name = 'elasticsearch' rootProject.name = 'elasticsearch'
String[] projects = [ List projects = [
'rest-api-spec', 'rest-api-spec',
'core', 'core',
'distribution:zip', 'distribution:zip',
@ -35,9 +35,19 @@ String[] projects = [
'qa:vagrant', 'qa:vagrant',
] ]
if (hasProperty('elasticsearch.projectsPrefix')) { boolean isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse')
String prefix = getProperty('elasticsearch.projectsPrefix') if (isEclipse) {
projects = projects.collect { "${prefix}:${it}" } // eclipse cannot handle an intermediate dependency between main and test, so we must create separate projects
// for core-src and core-tests
projects << 'core-tests'
}
include projects.toArray(new String[0])
if (isEclipse) {
project(":core").projectDir = new File(rootProject.projectDir, 'core/src/main')
project(":core").buildFileName = 'eclipse-build.gradle'
project(":core-tests").projectDir = new File(rootProject.projectDir, 'core/src/test')
project(":core-tests").buildFileName = 'eclipse-build.gradle'
} }
include projects