diff --git a/build.gradle b/build.gradle index ec8a06d44b..750537e93b 100644 --- a/build.gradle +++ b/build.gradle @@ -12,8 +12,8 @@ buildscript { mavenCentral() jcenter() } - - apply from: file('gradle/buildscript.gradle'), to: buildscript + + apply from: file('gradle/buildscript.gradle'), to: buildscript } allprojects { @@ -27,6 +27,7 @@ allprojects { subprojects { apply plugin: 'java' + apply plugin: 'shadow' group = "com.netflix.rxjava" // make 'examples' use the same classpath @@ -45,22 +46,29 @@ subprojects { sourceSets { examples perf { - compileClasspath += sourceSets.main.output - } + compileClasspath += sourceSets.main.output + } } tasks.build { //include 'examples' in build task dependsOn(examplesClasses) - dependsOn(perfClasses) + dependsOn(perfClasses) + } + + task perfJar(type: Jar, dependsOn: perfClasses) { + from sourceSets.perf.output + sourceSets.main.output } dependencies { perfCompile 'org.openjdk.jmh:jmh-core:0.5.3' perfCompile 'org.openjdk.jmh:jmh-generator-annprocess:0.5.3' - //perfCompile project } + + artifacts { + perfRuntime perfJar + } eclipse { classpath { @@ -78,49 +86,59 @@ subprojects { } } - /** - * By default: Run without arguments this will execute all benchmarks that are found (can take a long time). - * - * Optionally pass arguments for custom execution. Example: - * - * ../gradlew benchmarks '-Pjmh=-f 1 -tu ns -bm avgt -wi 5 -i 5 -r 1 .*OperatorSerializePerf.*' - * - * To see all options: - * - * ../gradlew benchmarks '-Pjmh=-h' - */ - task benchmarks(type: JavaExec) { - main = 'org.openjdk.jmh.Main' - classpath = sourceSets.perf.runtimeClasspath + sourceSets.main.output - maxHeapSize = "512m" - - if (project.hasProperty('jmh')) { - args(jmh.split(' ')) - } else { - //args '-h' // help output - args '-f' // fork - args '1' - args '-tu' // time unit - args 'ns' - args '-bm' // benchmark mode - args 'avgt' - args '-wi' // warmup iterations - args '5' - args '-i' // test iterations - args '5' - args '-r' // time per execution in seconds - args '5' - //args '-prof' // profilers - //args 'HS_GC' // HotSpot (tm) memory manager (GC) profiling via implementation-specific MBeans - //args 'HS_RT' // HotSpot (tm) runtime profiling via implementation-specific MBeans - //args 'HS_THR' // HotSpot (tm) threading subsystem via implementation-specific MBeans - //args 'HS_COMP' // HotSpot (tm) JIT compiler profiling via implementation-specific MBeans - //args 'HS_CL' // HotSpot (tm) classloader profiling via implementation-specific MBeans - //args 'STACK' // Simple and naive Java stack profiler - args '.*OperatorSerializePerf.*' // for running only a specific test - } - } - + /** + * By default: Run without arguments this will execute all benchmarks that are found (can take a long time). + * + * Optionally pass arguments for custom execution. Example: + * + * ../gradlew benchmarks '-Pjmh=-f 1 -tu ns -bm avgt -wi 5 -i 5 -r 1 .*OperatorSerializePerf.*' + * + * To see all options: + * + * ../gradlew benchmarks '-Pjmh=-h' + */ + task benchmarks(type: JavaExec) { + main = 'org.openjdk.jmh.Main' + classpath = sourceSets.perf.runtimeClasspath + sourceSets.main.output + maxHeapSize = "512m" + + if (project.hasProperty('jmh')) { + args(jmh.split(' ')) + } else { + //args '-h' // help output + args '-f' // fork + args '1' + args '-tu' // time unit + args 'ns' + args '-bm' // benchmark mode + args 'avgt' + args '-wi' // warmup iterations + args '5' + args '-i' // test iterations + args '5' + args '-r' // time per execution in seconds + args '5' + //args '-prof' // profilers + //args 'HS_GC' // HotSpot (tm) memory manager (GC) profiling via implementation-specific MBeans + //args 'HS_RT' // HotSpot (tm) runtime profiling via implementation-specific MBeans + //args 'HS_THR' // HotSpot (tm) threading subsystem via implementation-specific MBeans + //args 'HS_COMP' // HotSpot (tm) JIT compiler profiling via implementation-specific MBeans + //args 'HS_CL' // HotSpot (tm) classloader profiling via implementation-specific MBeans + //args 'STACK' // Simple and naive Java stack profiler + args '.*OperatorSerializePerf.*' // for running only a specific test + } + } + + shadow { + classifier = "benchmarks" + includeDependenciesFor = ["runtime", "perfRuntime"] + + transformer(com.github.jengelman.gradle.plugins.shadow.transformers.ManifestResourceTransformer) { + mainClass = "org.openjdk.jmh.Main" + } + } + + shadowJar.dependsOn perfJar } project(':rxjava-core') { diff --git a/gradle/buildscript.gradle b/gradle/buildscript.gradle index 0b6da7ce84..2d8643103e 100644 --- a/gradle/buildscript.gradle +++ b/gradle/buildscript.gradle @@ -2,10 +2,16 @@ repositories { // Repo in addition to maven central repositories { maven { url 'http://dl.bintray.com/content/netflixoss/external-gradle-plugins/' } } // For gradle-release + maven { + //FIXME: waiting for https://github.com/johnrengelman/shadow/pull/38 to merge + name 'Shadow' + url 'http://dl.bintray.com/content/gvsmirnov/gradle-plugins' + } } dependencies { classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.6.1' classpath 'com.mapvine:gradle-cobertura-plugin:0.1' classpath 'gradle-release:gradle-release:1.1.5' classpath 'org.ajoberstar:gradle-git:0.5.0' + classpath 'com.github.jengelman.gradle.plugins:shadow:0.8.1' }