Feign makes writing java http clients easier
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

178 lines
6.0 KiB

// Manages classpath and IDE annotation processing config for dagger.
//
// setup:
// Add the following to your root build.gradle
//
// apply plugin: 'idea'
// subprojects {
// apply from: rootProject.file('dagger.gradle')
// }
//
// do not use gradle integration of the ide. instead generate and import like so:
//
// ./gradlew clean cleanEclipse cleanIdea eclipse idea
//
// known limitations:
// as output folders include generated classes, you may need to run clean a few times.
// incompatible with android plugin as it applies the java plugin
// unnecessarily applies both eclipse and idea plugins even if you don't use them
// suffers from the normal non-IDE eclipse integration where nested projects don't import properly.
// change your structure to flattened to avoid this.
//
// deprecated by: https://github.com/Netflix/gradle-template/issues/8
//
// original design: cfieber
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
if (!project.hasProperty('daggerVersion')) {
ext {
daggerVersion = "1.1.0"
}
}
configurations {
daggerCompiler {
visible false
}
}
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.squareup.dagger') {
details.useVersion daggerVersion
}
}
}
}
def annotationGeneratedSources = file('.generated/src')
def annotationGeneratedTestSources = file('.generated/test')
task prepareAnnotationGeneratedSourceDirs(overwrite: true) << {
annotationGeneratedSources.mkdirs()
annotationGeneratedTestSources.mkdirs()
sourceSets*.java.srcDirs*.each { it.mkdirs() }
sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}
sourceSets {
main {
java {
compileClasspath += configurations.daggerCompiler
}
}
test {
java {
compileClasspath += configurations.daggerCompiler
}
}
}
dependencies {
compile "com.squareup.dagger:dagger:${project.daggerVersion}"
daggerCompiler "com.squareup.dagger:dagger-compiler:${project.daggerVersion}"
}
rootProject.idea.project.ipr.withXml { projectXml ->
projectXml.asNode().component.find { it.@name == 'CompilerConfiguration' }.annotationProcessing[0].replaceNode {
annotationProcessing {
profile(default: true, name: 'Default', enabled: true) {
sourceOutputDir name: relativePath(annotationGeneratedSources)
sourceTestOutputDir name: relativePath(annotationGeneratedTestSources)
outputRelativeToContentRoot value: true
processorPath useClasspath: true
}
}
}
}
tasks.ideaModule.dependsOn(prepareAnnotationGeneratedSourceDirs)
idea.module {
scopes.PROVIDED.plus += project.configurations.daggerCompiler
iml.withXml { xml->
def moduleSource = xml.asNode().component.find { it.@name = 'NewModuleRootManager' }.content[0]
moduleSource.appendNode('sourceFolder', [url: "file://\$MODULE_DIR\$/${relativePath(annotationGeneratedSources)}", isTestSource: false])
moduleSource.appendNode('sourceFolder', [url: "file://\$MODULE_DIR\$/${relativePath(annotationGeneratedTestSources)}", isTestSource: true])
}
}
tasks.eclipseClasspath.dependsOn(prepareAnnotationGeneratedSourceDirs)
eclipse.classpath {
plusConfigurations += project.configurations.daggerCompiler
}
tasks.eclipseClasspath {
doLast {
eclipse.classpath.file.withXml {
it.asNode().children()[0] + {
classpathentry(kind: 'src', path: relativePath(annotationGeneratedSources)) {
attributes {
attribute name: 'optional', value: true
}
}
}
}
}
}
// http://forums.gradle.org/gradle/topics/eclipse_generated_files_should_be_put_in_the_same_place_as_the_gradle_generated_files
Map pathMappings = [:];
SourceSetContainer sourceSets = project.sourceSets;
sourceSets.each { SourceSet sourceSet ->
String relativeJavaOutputDirectory = project.relativePath(sourceSet.output.classesDir);
String relativeResourceOutputDirectory = project.relativePath(sourceSet.output.resourcesDir);
sourceSet.java.getSrcDirTrees().each { DirectoryTree sourceDirectory ->
String relativeSrcPath = project.relativePath(sourceDirectory.dir.absolutePath);
pathMappings[relativeSrcPath] = relativeJavaOutputDirectory;
}
sourceSet.resources.getSrcDirTrees().each { DirectoryTree resourceDirectory ->
String relativeResourcePath = project.relativePath(resourceDirectory.dir.absolutePath);
pathMappings[relativeResourcePath] = relativeResourceOutputDirectory;
}
}
project.eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.findAll { entry ->
return entry.kind == 'src';
}.each { entry ->
if(pathMappings.containsKey(entry.path)) {
entry.output = pathMappings[entry.path];
}
}
}
}
eclipse.jdt.file.withProperties { props ->
props.setProperty('org.eclipse.jdt.core.compiler.processAnnotations', 'enabled')
}
tasks.eclipseJdt {
doFirst {
def aptPrefs = file('.settings/org.eclipse.jdt.apt.core.prefs')
aptPrefs.parentFile.mkdirs()
aptPrefs.text = """\
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=${relativePath(annotationGeneratedSources)}
org.eclipse.jdt.apt.reconcileEnabled=true
""".stripIndent()
file('.factorypath').withWriter {
new groovy.xml.MarkupBuilder(it).'factorypath' {
project.configurations.daggerCompiler.files.each { dep ->
'factorypathentry' kind: 'EXTJAR', id: dep.absolutePath, enabled: true, runInBatchMode: false
}
}
}
}
}