Build: use separate build directories for eclipse and intellij

This fixes the problem where doing a gradle clean from the command line
completely breaks the IDE.
This commit is contained in:
Ryan Ernst 2016-02-04 15:44:30 -08:00
parent 7a6adfd93a
commit 2fef5dee96
4 changed files with 19 additions and 10 deletions

6
.gitignore vendored
View File

@ -4,12 +4,13 @@
*.iml *.iml
*.ipr *.ipr
*.iws *.iws
build-idea/
# eclipse files # eclipse files
.project .project
.classpath .classpath
eclipse-build
.settings .settings
build-eclipse/
# netbeans files # netbeans files
nb-configuration.xml nb-configuration.xml
@ -18,7 +19,6 @@ nbactions.xml
# gradle stuff # gradle stuff
.gradle/ .gradle/
build/ build/
generated-resources/
# maven stuff (to be removed when trunk becomes 4.x) # maven stuff (to be removed when trunk becomes 4.x)
*-execution-hints.log *-execution-hints.log
@ -38,5 +38,5 @@ html_docs
# random old stuff that we should look at the necessity of... # random old stuff that we should look at the necessity of...
/tmp/ /tmp/
backwards/ backwards/
eclipse-build

View File

@ -75,8 +75,9 @@ subprojects {
allprojects { allprojects {
// injecting groovy property variables into all projects // injecting groovy property variables into all projects
project.ext { project.ext {
// for eclipse hacks... // for ide hacks...
isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse') isEclipse = System.getProperty("eclipse.launcher") != null || gradle.startParameter.taskNames.contains('eclipse') || gradle.startParameter.taskNames.contains('cleanEclipse')
isIdea = System.getProperty("idea.active") != null || gradle.startParameter.taskNames.contains('idea') || gradle.startParameter.taskNames.contains('cleanIdea')
} }
} }
@ -170,12 +171,15 @@ gradle.projectsEvaluated {
allprojects { allprojects {
apply plugin: 'idea' apply plugin: 'idea'
if (isIdea) {
project.buildDir = file('build-idea')
}
idea { idea {
module { module {
// same as for the IntelliJ Gradle tooling integration // same as for the IntelliJ Gradle tooling integration
inheritOutputDirs = false inheritOutputDirs = false
outputDir = file('build/classes/main') outputDir = file('build-idea/classes/main')
testOutputDir = file('build/classes/test') testOutputDir = file('build-idea/classes/test')
iml { iml {
// fix so that Gradle idea plugin properly generates support for resource folders // fix so that Gradle idea plugin properly generates support for resource folders
@ -222,14 +226,19 @@ allprojects {
apply plugin: 'eclipse' apply plugin: 'eclipse'
plugins.withType(JavaBasePlugin) { plugins.withType(JavaBasePlugin) {
eclipse.classpath.defaultOutputDir = new File(project.buildDir, 'eclipse') File eclipseBuild = project.file('build-eclipse')
eclipse.classpath.defaultOutputDir = eclipseBuild
if (isEclipse) {
// set this so generated dirs will be relative to eclipse build
project.buildDir = eclipseBuild
}
eclipse.classpath.file.whenMerged { classpath -> eclipse.classpath.file.whenMerged { classpath ->
// give each source folder a unique corresponding output folder // give each source folder a unique corresponding output folder
int i = 0; int i = 0;
classpath.entries.findAll { it instanceof SourceFolder }.each { folder -> classpath.entries.findAll { it instanceof SourceFolder }.each { folder ->
i++; i++;
// this is *NOT* a path or a file. // this is *NOT* a path or a file.
folder.output = "build/eclipse/" + i folder.output = "build-eclipse/" + i
} }
} }
} }

View File

@ -78,7 +78,7 @@ extraArchive {
eclipse { eclipse {
classpath { classpath {
defaultOutputDir = new File(file('build'), 'eclipse') defaultOutputDir = file('build-eclipse')
} }
} }

View File

@ -29,7 +29,7 @@ import org.gradle.api.tasks.Copy
class PluginPropertiesTask extends Copy { class PluginPropertiesTask extends Copy {
PluginPropertiesExtension extension PluginPropertiesExtension extension
File generatedResourcesDir = new File(project.projectDir, 'generated-resources') File generatedResourcesDir = new File(project.buildDir, 'generated-resources')
PluginPropertiesTask() { PluginPropertiesTask() {
File templateFile = new File(project.buildDir, 'templates/plugin-descriptor.properties') File templateFile = new File(project.buildDir, 'templates/plugin-descriptor.properties')