From da922d22ba731663d57abd23f468c92c5ddfe72d Mon Sep 17 00:00:00 2001 From: David Karnok Date: Tue, 3 Oct 2017 09:59:14 +0200 Subject: [PATCH] 2.x: Upgrade to Gradle 4.2, remove nebula, custom rls (#5633) --- .travis.yml | 4 +- HEADER | 10 + build.gradle | 319 ++++++++++++------ gradle.properties | 2 +- gradle/buildViaTravis.sh | 7 +- gradle/wrapper/gradle-wrapper.jar | Bin 53319 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 26 +- gradlew.bat | 6 - .../java/io/reactivex/BlockingGetPerf.java | 0 .../java/io/reactivex/BlockingPerf.java | 0 .../java/io/reactivex/CallableAsyncPerf.java | 0 .../io/reactivex/EachTypeFlatMapPerf.java | 0 .../java/io/reactivex/FlatMapJustPerf.java | 0 .../io/reactivex/FlattenCrossMapPerf.java | 0 .../java/io/reactivex/FlattenJustPerf.java | 0 .../InputWithIncrementingInteger.java | 0 .../java/io/reactivex/JustAsyncPerf.java | 0 .../io/reactivex/LatchedSingleObserver.java | 0 .../io/reactivex/ObservableFlatMapPerf.java | 0 .../io/reactivex/OperatorFlatMapPerf.java | 0 .../java/io/reactivex/OperatorMergePerf.java | 0 .../java/io/reactivex/PerfAsyncConsumer.java | 0 .../java/io/reactivex/PerfConsumer.java | 0 .../io/reactivex/PerfInteropConsumer.java | 0 .../java/io/reactivex/PerfObserver.java | 0 .../java/io/reactivex/PerfSubscriber.java | 0 .../java/io/reactivex/RangePerf.java | 0 .../java/io/reactivex/ReducePerf.java | 0 .../java/io/reactivex/RxVsStreamPerf.java | 0 .../java/io/reactivex/StrictPerf.java | 0 .../java/io/reactivex/ToFlowablePerf.java | 0 .../java/io/reactivex/XMapYPerf.java | 0 .../io/reactivex/parallel/ParallelPerf.java | 0 34 files changed, 248 insertions(+), 129 deletions(-) create mode 100644 HEADER rename src/{perf => jmh}/java/io/reactivex/BlockingGetPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/BlockingPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/CallableAsyncPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/EachTypeFlatMapPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/FlatMapJustPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/FlattenCrossMapPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/FlattenJustPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/InputWithIncrementingInteger.java (100%) rename src/{perf => jmh}/java/io/reactivex/JustAsyncPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/LatchedSingleObserver.java (100%) rename src/{perf => jmh}/java/io/reactivex/ObservableFlatMapPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/OperatorFlatMapPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/OperatorMergePerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/PerfAsyncConsumer.java (100%) rename src/{perf => jmh}/java/io/reactivex/PerfConsumer.java (100%) rename src/{perf => jmh}/java/io/reactivex/PerfInteropConsumer.java (100%) rename src/{perf => jmh}/java/io/reactivex/PerfObserver.java (100%) rename src/{perf => jmh}/java/io/reactivex/PerfSubscriber.java (100%) rename src/{perf => jmh}/java/io/reactivex/RangePerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/ReducePerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/RxVsStreamPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/StrictPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/ToFlowablePerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/XMapYPerf.java (100%) rename src/{perf => jmh}/java/io/reactivex/parallel/ParallelPerf.java (100%) diff --git a/.travis.yml b/.travis.yml index ebedf605a4..972c0c4cc0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,9 +10,9 @@ jdk: # prevent travis running gradle assemble; let the build script do it anyway install: true - + +# running in container causes test failures and 2x-3x longer build, use standalone instances sudo: required -# as per http://blog.travis-ci.com/2014-12-17-faster-builds-with-container-based-infrastructure/ # script for build and release via Travis to Bintray script: gradle/buildViaTravis.sh diff --git a/HEADER b/HEADER new file mode 100644 index 0000000000..3949e0b453 --- /dev/null +++ b/HEADER @@ -0,0 +1,10 @@ +Copyright (c) 2016-present, RxJava Contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in +compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is +distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See +the License for the specific language governing permissions and limitations under the License. diff --git a/build.gradle b/build.gradle index 1b3e557648..927fde214a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,22 +1,47 @@ buildscript { - repositories { jcenter() } + repositories { + jcenter() + mavenCentral() + maven { + url "https://plugins.gradle.org/m2/" + } + } dependencies { - classpath 'com.netflix.nebula:gradle-rxjava-project-plugin:4.0.0' - classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.1.0' + classpath "ru.vyarus:gradle-animalsniffer-plugin:1.2.0" + classpath "gradle.plugin.nl.javadude.gradle.plugins:license-gradle-plugin:0.13.1" + classpath "me.champeau.gradle:jmh-gradle-plugin:0.4.4" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3" + classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.5.2" } } -group = 'io.reactivex.rxjava2' +group = "io.reactivex.rxjava2" +ext.githubProjectName = "rxjava" + +version = project.properties["release.version"] + +def releaseTag = System.getenv("TRAVIS_TAG"); +if (releaseTag != null && !releaseTag.isEmpty()) { + if (releaseTag.startsWith("v")) { + releaseTag = releaseTag.substring(1); + } + version = releaseTag; + + println("Releasing with version " + project.properties["release.version"]); +} -description = 'RxJava: Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.' +description = "RxJava: Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM." -apply plugin: 'java' -// apply plugin: 'pmd' // disabled because runs out of memory on Travis -// apply plugin: 'findbugs' // disabled because runs out of memory on Travis -apply plugin: 'checkstyle' -apply plugin: 'jacoco' -apply plugin: 'ru.vyarus.animalsniffer' -apply plugin: 'nebula.rxjava-project' +apply plugin: "java" +apply plugin: "checkstyle" +apply plugin: "jacoco" +apply plugin: "ru.vyarus.animalsniffer" +apply plugin: "maven" +apply plugin: "osgi" +apply plugin: "me.champeau.gradle.jmh" +apply plugin: "com.github.hierynomus.license" +apply plugin: "com.jfrog.bintray" +apply plugin: "com.jfrog.artifactory" sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 @@ -32,61 +57,158 @@ def testNgVersion = "6.9.10" // -------------------------------------- +repositories { + mavenCentral() +} + dependencies { - signature 'org.codehaus.mojo.signature:java16:1.1@signature' + signature "org.codehaus.mojo.signature:java16:1.1@signature" compile "org.reactivestreams:reactive-streams:$reactiveStreamsVersion" testCompile "junit:junit:$junitVersion" testCompile "org.mockito:mockito-core:$mockitoVersion" - perfCompile "org.openjdk.jmh:jmh-core:$jmhVersion" - perfCompile "org.openjdk.jmh:jmh-generator-annprocess:$jmhVersion" - testCompile "org.reactivestreams:reactive-streams-tck:$reactiveStreamsVersion" testCompile "org.testng:testng:$testNgVersion" } javadoc { + failOnError = false exclude "**/internal/**" exclude "**/test/**" exclude "**/perf/**" + exclude "**/jmh/**" options { windowTitle = "RxJava Javadoc ${project.version}" } // Clear the following options to make the docs consistent with the old format - options.addStringOption('top').value = '' - options.addStringOption('doctitle').value = '' - options.addStringOption('header').value = '' + options.addStringOption("top").value = "" + options.addStringOption("doctitle").value = "" + options.addStringOption("header").value = "" options.links("http://docs.oracle.com/javase/7/docs/api/") options.links("http://www.reactive-streams.org/reactive-streams-${reactiveStreamsVersion}-javadoc/") if (JavaVersion.current().isJava7()) { // "./gradle/stylesheet.css" only supports Java 7 - options.addStringOption('stylesheetfile', rootProject.file('./gradle/stylesheet.css').toString()) + options.addStringOption("stylesheetfile", rootProject.file("./gradle/stylesheet.css").toString()) } } animalsniffer { - annotation = 'io.reactivex.internal.util.SuppressAnimalSniffer' + annotation = "io.reactivex.internal.util.SuppressAnimalSniffer" +} + +task sourcesJar(type: Jar, dependsOn: classes) { + classifier = "sources" + from sourceSets.main.allSource +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = "javadoc" + from javadoc.destinationDir +} + +artifacts { + archives jar + archives sourcesJar + archives javadocJar +} + +jar { + manifest { + name = "rxjava" + instruction "Bundle-Vendor", "RxJava Contributors" + instruction "Bundle-DocURL", "https://github.com/ReactiveX/RxJava" + instruction "Import-Package", "!org.junit,!junit.framework,!org.mockito.*,!org.testng.*,*" + instruction "Eclipse-ExtensibleAPI", "true" + } +} + +license { + header rootProject.file("HEADER") + ext.year = Calendar.getInstance().get(Calendar.YEAR) + skipExistingHeaders true + ignoreFailures true + excludes(["**/*.md", "**/*.txt"]) +} + +apply plugin: "maven-publish" + +install { + repositories.mavenInstaller.pom.project { + name "RxJava" + description "Reactive Extensions for Java" + url "https://github.com/ReactiveX/RxJava" + licenses { + license { + name "The Apache Software License, Version 2.0" + url "http://www.apache.org/licenses/LICENSE-2.0.txt" + distribution "repo" + } + } + developers { + developer { + id "akarnokd" + name "David Karnok" + email "akarnokd@gmail.com" + } + } + scm { + connection "scm:git:git@github.com:ReactiveX/RxJava.git" + url "scm:git:git@github.com:ReactiveX/RxJava.git" + developerConnection "scm:git:git@github.com:ReactiveX/RxJava.git" + } + issueManagement { + system "github" + url "https://github.com/ReactiveX/RxJava/issues" + } + } +} + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact (sourcesJar) { + classifier = "sources" + } + } + } +} + +// Reactive-Streams as compile dependency +publishing.publications.all { + pom.withXml { + asNode().dependencies."*".findAll() { + it.scope.text() == "runtime" && project.configurations.compile.allDependencies.find { dep -> + dep.name == it.artifactId.text() + } + }.each { it.scope*.value = "compile"} + } } -// support for snapshot/final releases with the various branches RxJava uses -nebulaRelease { - addReleaseBranchPattern(/\d+\.\d+\.\d+/) - addReleaseBranchPattern('HEAD') +jmh { + jmhVersion = "1.19" + humanOutputFile = null + + if (project.hasProperty("jmh")) { + include = ".*" + project.jmh + ".*" + println("JMH: " + include); + } + } -if (project.hasProperty('release.useLastTag')) { - tasks.prepare.enabled = false +plugins.withType(EclipsePlugin) { + project.eclipse.classpath.plusConfigurations += [ configurations.jmh ] } test { testLogging { // showing skipped occasionally should prevent CI timeout due to lack of standard output - events=['skipped', 'failed'] // "started", "passed" + events=["skipped", "failed"] // "started", "passed" // showStandardStreams = true exceptionFormat="full" @@ -102,7 +224,7 @@ test { maxHeapSize = "1200m" - if (System.getenv('CI') == null) { + if (System.getenv("CI") == null) { maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 } } @@ -110,7 +232,7 @@ test { task testng(type: Test) { useTestNG() testLogging { - events=['skipped', 'failed'] + events=["skipped", "failed"] exceptionFormat="full" debug.events = ["skipped", "failed"] @@ -127,10 +249,10 @@ task testng(type: Test) { check.dependsOn testng jacoco { - toolVersion = '0.7.7.201606060606' // See http://www.eclemma.org/jacoco/. + toolVersion = "0.7.9" // See http://www.eclemma.org/jacoco/. } -task GCandMem(dependsOn: 'check') << { +task GCandMem(dependsOn: "check") doLast { print("Memory usage before: ") println(java.lang.management.ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() / 1024.0 / 1024.0) System.gc() @@ -139,7 +261,7 @@ task GCandMem(dependsOn: 'check') << { println(java.lang.management.ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() / 1024.0 / 1024.0) } -task GCandMem2(dependsOn: 'test') << { +task GCandMem2(dependsOn: "test") doLast { print("Memory usage before: ") println(java.lang.management.ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() / 1024.0 / 1024.0) System.gc() @@ -159,7 +281,7 @@ jacocoTestReport { afterEvaluate { classDirectories = files(classDirectories.files.collect { fileTree(dir: it, - exclude: ['io/reactivex/tck/**']) + exclude: ["io/reactivex/tck/**"]) }) } } @@ -168,84 +290,71 @@ jacocoTestReport.dependsOn GCandMem build.dependsOn jacocoTestReport -// pmd { -// toolVersion = '5.4.2' -// ignoreFailures = true -// sourceSets = [sourceSets.main] -// ruleSets = [] -// ruleSetFiles = files('pmd.xml') -// } - -// pmdMain { -// reports { -// html.enabled = true -// xml.enabled = true -// } -// } - -// build.dependsOn pmdMain - -// task pmdPrint(dependsOn: 'pmdMain') << { -// File file = new File('build/reports/pmd/main.xml') -// if (file.exists()) { - -// println("Listing first 100 PMD violations") - -// file.eachLine { line, count -> -// if (count <= 100) { -// println(line) -// } -// } - -// } else { -// println("PMD file not found.") -// } -// } - -// build.dependsOn pmdPrint - checkstyle { - configFile file('checkstyle.xml') + configFile file("checkstyle.xml") ignoreFailures = true toolVersion ="6.19" } -/* -findbugs { - ignoreFailures true - toolVersion = '3.0.1' - effort = 'max' - reportLevel = 'low' - sourceSets = [sourceSets.main] -} - -findbugsMain { - reports { - html.enabled = false // Findbugs can only have on report enabled - xml.enabled = true - } -} -*/ - -// from https://discuss.gradle.org/t/maven-publish-plugin-generated-pom-making-dependency-scope-runtime/7494/10 +if (rootProject.hasProperty("releaseMode")) { -publishing.publications.all { - pom.withXml { - asNode().dependencies.'*'.findAll() { - it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep -> - dep.name == it.artifactId.text() - } - }.each { it.scope*.value = 'compile'} - - asNode().developers.'*'.findAll() { - it.id.text() == 'benjchristensen' - } .each { - it.id*.value = 'akarnokd' - it.name*.value = 'David Karnok' - it.email*.value = 'akarnokd@gmail.com' + if ("branch".equals(rootProject.releaseMode)) { + // From https://github.com/ReactiveX/RxAndroid/blob/2.x/rxandroid/build.gradle#L94 + + println("ReleaseMode: " + rootProject.releaseMode); + artifactory { + contextUrl = "https://oss.jfrog.org" + + publish { + repository { + repoKey = "oss-snapshot-local" + + username = rootProject.bintrayUser + password = rootProject.bintrayKey + } + + defaults { + publishConfigs("archives") + } + } } - asNode().properties.nebula_Module_Owner*.value = 'akarnokd@gmail.com' - asNode().properties.nebula_Module_Email*.value = 'akarnokd@gmail.com' + build.finalizedBy(artifactoryPublish) } + + if ("full".equals(rootProject.releaseMode)) { + // based on https://github.com/bintray/gradle-bintray-plugin + println("ReleaseMode: " + rootProject.releaseMode); + + bintray { + user = rootProject.bintrayUser + key = rootProject.bintrayKey + configurations = ["archives"] + publications = ["mavenJava"] + publish = true + pkg { + repo = "generic" + name = "rxjava" + userOrg = "reactivex" + labels = ["rxjava", "reactivex"] + licenses = ["Apache-2.0"] + vcsUrl = "https://github.com/ReactiveX/RxJava.git" + version { + name = rver + gpg { + sign = true + } + mavenCentralSync { + sync = true + user = rootProject.sonatypeUsername + password = rootProject.sonatypePassword + close = "1" + } + } + } + } + + build.finalizedBy(bintrayUpload) + } } + diff --git a/gradle.properties b/gradle.properties index 5d8d80efe5..53ddd3a0ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ release.scope=patch -release.version=2.0.0-DP0-SNAPSHOT +release.version=2.2.0-SNAPSHOT diff --git a/gradle/buildViaTravis.sh b/gradle/buildViaTravis.sh index 4456600e36..f8ef3a8440 100755 --- a/gradle/buildViaTravis.sh +++ b/gradle/buildViaTravis.sh @@ -12,14 +12,13 @@ export GRADLE_OPTS=-Xmx1024m if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then echo -e "Build Pull Request #$TRAVIS_PULL_REQUEST => Branch [$TRAVIS_BRANCH]" - ./gradlew -Prelease.useLastTag=true build + ./gradlew -PreleaseMode=pr build elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" == "" ]; then echo -e 'Build Branch with Snapshot => Branch ['$TRAVIS_BRANCH']' - ./gradlew -Prelease.travisci=true -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" build snapshot --stacktrace + ./gradlew -PreleaseMode=branch -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" build --stacktrace elif [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_TAG" != "" ]; then echo -e 'Build Branch for Release => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG']' - ./gradlew -Prelease.travisci=true -Prelease.useLastTag=true -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" final --stacktrace + ./gradlew -PreleaseMode=full -PbintrayUser="${bintrayUser}" -PbintrayKey="${bintrayKey}" -PsonatypeUsername="${sonatypeUsername}" -PsonatypePassword="${sonatypePassword}" build --stacktrace else echo -e 'WARN: Should not be here => Branch ['$TRAVIS_BRANCH'] Tag ['$TRAVIS_TAG'] Pull Request ['$TRAVIS_PULL_REQUEST']' - ./gradlew -Prelease.useLastTag=true build fi diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d3b83982b9b1bccad955349d702be9b884c6e049..736fb7d3f94c051b359fc7ae7212d351bc094bdd 100644 GIT binary patch delta 25563 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 delta 24167 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 K`jG<&(EkDPr&!Mb diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d19bad0fda..74bb77845e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jun 28 11:19:41 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-bin.zip diff --git a/gradlew b/gradlew index 27309d9231..cccdd3d517 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 832fdb6079..f9553162f1 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -49,7 +49,6 @@ goto fail @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/perf/java/io/reactivex/BlockingGetPerf.java b/src/jmh/java/io/reactivex/BlockingGetPerf.java similarity index 100% rename from src/perf/java/io/reactivex/BlockingGetPerf.java rename to src/jmh/java/io/reactivex/BlockingGetPerf.java diff --git a/src/perf/java/io/reactivex/BlockingPerf.java b/src/jmh/java/io/reactivex/BlockingPerf.java similarity index 100% rename from src/perf/java/io/reactivex/BlockingPerf.java rename to src/jmh/java/io/reactivex/BlockingPerf.java diff --git a/src/perf/java/io/reactivex/CallableAsyncPerf.java b/src/jmh/java/io/reactivex/CallableAsyncPerf.java similarity index 100% rename from src/perf/java/io/reactivex/CallableAsyncPerf.java rename to src/jmh/java/io/reactivex/CallableAsyncPerf.java diff --git a/src/perf/java/io/reactivex/EachTypeFlatMapPerf.java b/src/jmh/java/io/reactivex/EachTypeFlatMapPerf.java similarity index 100% rename from src/perf/java/io/reactivex/EachTypeFlatMapPerf.java rename to src/jmh/java/io/reactivex/EachTypeFlatMapPerf.java diff --git a/src/perf/java/io/reactivex/FlatMapJustPerf.java b/src/jmh/java/io/reactivex/FlatMapJustPerf.java similarity index 100% rename from src/perf/java/io/reactivex/FlatMapJustPerf.java rename to src/jmh/java/io/reactivex/FlatMapJustPerf.java diff --git a/src/perf/java/io/reactivex/FlattenCrossMapPerf.java b/src/jmh/java/io/reactivex/FlattenCrossMapPerf.java similarity index 100% rename from src/perf/java/io/reactivex/FlattenCrossMapPerf.java rename to src/jmh/java/io/reactivex/FlattenCrossMapPerf.java diff --git a/src/perf/java/io/reactivex/FlattenJustPerf.java b/src/jmh/java/io/reactivex/FlattenJustPerf.java similarity index 100% rename from src/perf/java/io/reactivex/FlattenJustPerf.java rename to src/jmh/java/io/reactivex/FlattenJustPerf.java diff --git a/src/perf/java/io/reactivex/InputWithIncrementingInteger.java b/src/jmh/java/io/reactivex/InputWithIncrementingInteger.java similarity index 100% rename from src/perf/java/io/reactivex/InputWithIncrementingInteger.java rename to src/jmh/java/io/reactivex/InputWithIncrementingInteger.java diff --git a/src/perf/java/io/reactivex/JustAsyncPerf.java b/src/jmh/java/io/reactivex/JustAsyncPerf.java similarity index 100% rename from src/perf/java/io/reactivex/JustAsyncPerf.java rename to src/jmh/java/io/reactivex/JustAsyncPerf.java diff --git a/src/perf/java/io/reactivex/LatchedSingleObserver.java b/src/jmh/java/io/reactivex/LatchedSingleObserver.java similarity index 100% rename from src/perf/java/io/reactivex/LatchedSingleObserver.java rename to src/jmh/java/io/reactivex/LatchedSingleObserver.java diff --git a/src/perf/java/io/reactivex/ObservableFlatMapPerf.java b/src/jmh/java/io/reactivex/ObservableFlatMapPerf.java similarity index 100% rename from src/perf/java/io/reactivex/ObservableFlatMapPerf.java rename to src/jmh/java/io/reactivex/ObservableFlatMapPerf.java diff --git a/src/perf/java/io/reactivex/OperatorFlatMapPerf.java b/src/jmh/java/io/reactivex/OperatorFlatMapPerf.java similarity index 100% rename from src/perf/java/io/reactivex/OperatorFlatMapPerf.java rename to src/jmh/java/io/reactivex/OperatorFlatMapPerf.java diff --git a/src/perf/java/io/reactivex/OperatorMergePerf.java b/src/jmh/java/io/reactivex/OperatorMergePerf.java similarity index 100% rename from src/perf/java/io/reactivex/OperatorMergePerf.java rename to src/jmh/java/io/reactivex/OperatorMergePerf.java diff --git a/src/perf/java/io/reactivex/PerfAsyncConsumer.java b/src/jmh/java/io/reactivex/PerfAsyncConsumer.java similarity index 100% rename from src/perf/java/io/reactivex/PerfAsyncConsumer.java rename to src/jmh/java/io/reactivex/PerfAsyncConsumer.java diff --git a/src/perf/java/io/reactivex/PerfConsumer.java b/src/jmh/java/io/reactivex/PerfConsumer.java similarity index 100% rename from src/perf/java/io/reactivex/PerfConsumer.java rename to src/jmh/java/io/reactivex/PerfConsumer.java diff --git a/src/perf/java/io/reactivex/PerfInteropConsumer.java b/src/jmh/java/io/reactivex/PerfInteropConsumer.java similarity index 100% rename from src/perf/java/io/reactivex/PerfInteropConsumer.java rename to src/jmh/java/io/reactivex/PerfInteropConsumer.java diff --git a/src/perf/java/io/reactivex/PerfObserver.java b/src/jmh/java/io/reactivex/PerfObserver.java similarity index 100% rename from src/perf/java/io/reactivex/PerfObserver.java rename to src/jmh/java/io/reactivex/PerfObserver.java diff --git a/src/perf/java/io/reactivex/PerfSubscriber.java b/src/jmh/java/io/reactivex/PerfSubscriber.java similarity index 100% rename from src/perf/java/io/reactivex/PerfSubscriber.java rename to src/jmh/java/io/reactivex/PerfSubscriber.java diff --git a/src/perf/java/io/reactivex/RangePerf.java b/src/jmh/java/io/reactivex/RangePerf.java similarity index 100% rename from src/perf/java/io/reactivex/RangePerf.java rename to src/jmh/java/io/reactivex/RangePerf.java diff --git a/src/perf/java/io/reactivex/ReducePerf.java b/src/jmh/java/io/reactivex/ReducePerf.java similarity index 100% rename from src/perf/java/io/reactivex/ReducePerf.java rename to src/jmh/java/io/reactivex/ReducePerf.java diff --git a/src/perf/java/io/reactivex/RxVsStreamPerf.java b/src/jmh/java/io/reactivex/RxVsStreamPerf.java similarity index 100% rename from src/perf/java/io/reactivex/RxVsStreamPerf.java rename to src/jmh/java/io/reactivex/RxVsStreamPerf.java diff --git a/src/perf/java/io/reactivex/StrictPerf.java b/src/jmh/java/io/reactivex/StrictPerf.java similarity index 100% rename from src/perf/java/io/reactivex/StrictPerf.java rename to src/jmh/java/io/reactivex/StrictPerf.java diff --git a/src/perf/java/io/reactivex/ToFlowablePerf.java b/src/jmh/java/io/reactivex/ToFlowablePerf.java similarity index 100% rename from src/perf/java/io/reactivex/ToFlowablePerf.java rename to src/jmh/java/io/reactivex/ToFlowablePerf.java diff --git a/src/perf/java/io/reactivex/XMapYPerf.java b/src/jmh/java/io/reactivex/XMapYPerf.java similarity index 100% rename from src/perf/java/io/reactivex/XMapYPerf.java rename to src/jmh/java/io/reactivex/XMapYPerf.java diff --git a/src/perf/java/io/reactivex/parallel/ParallelPerf.java b/src/jmh/java/io/reactivex/parallel/ParallelPerf.java similarity index 100% rename from src/perf/java/io/reactivex/parallel/ParallelPerf.java rename to src/jmh/java/io/reactivex/parallel/ParallelPerf.java