diff --git a/build.gradle b/build.gradle index 9bf0d5cfc..3f4f8f754 100644 --- a/build.gradle +++ b/build.gradle @@ -14,24 +14,33 @@ * limitations under the License. */ +/* +NOTE: plugins block cannot be used in script plugins +TODO: future versions of Gradle will remove this restriction +*/ plugins { - id "com.gradle.build-scan" version "1.9" - id 'com.jfrog.bintray' version '1.7.3' - id 'com.github.sherter.google-java-format' version '0.6' + id 'com.gradle.build-scan' version '1.9' // declare before any other plugin + + id 'com.github.sherter.google-java-format' version '0.6' apply false + id 'com.github.johnrengelman.shadow' version '2.0.1' apply false + id 'me.champeau.gradle.jmh' version '0.4.4' apply false + id 'io.morethan.jmhreport' version '0.6.2.1' apply false + id 'com.jfrog.artifactory' version '4.5.2' - id 'me.champeau.gradle.jmh' version '0.4.4' + id 'com.jfrog.bintray' version '1.7.3' } -repositories { - jcenter() -} +apply from: "$rootDir/gradle/configuration.gradle" +apply from: "$rootDir/gradle/versions.gradle" description = 'RSocket: stream oriented messaging passing with Reactive Stream semantics.' buildScan { licenseAgreementUrl = 'https://gradle.com/terms-of-service'; licenseAgree = 'yes' } subprojects { - apply plugin: 'java' + apply from: "$rootDir/gradle/java.gradle" + apply from: "$rootDir/gradle/codestyle.gradle" + apply plugin: 'maven' apply plugin: 'maven-publish' apply plugin: 'com.jfrog.bintray' @@ -40,38 +49,6 @@ subprojects { group = 'io.rsocket' version = mavenversion - compileJava { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 - options.compilerArgs << "-Xlint:deprecation" // << "-Xlint:unchecked" - } - - ext { - // common - jsr305Version = '3.0.2' - reactorVersion = '3.1.0.RELEASE' - nettyVersion = '4.1.15.Final' - reactiveStreamsVersion = '1.0.1' - slf4jVersion = '1.7.25' - // aeron - aeronVersion = '1.4.1' - // netty - reactorNettyVersion = '0.7.0.M2' - // spectator - spectatorVersion = '0.57.1' - hdrHistogramVersion = '2.1.9' - // tck-drivers - jacksonVersion = '2.9.1' - commonsLang3Version = '3.6' - airlineVersion = '0.8' - rxjavaVersion = '2.1.3' - // test - junitVersion = '4.12' - hamcrestVersion = '1.3' - mockitoVersion = '2.10.0' - jmhVersion = '1.19' - } - // custom tasks for creating source/javadoc jars task sourcesJar(type: Jar, dependsOn: classes) { classifier = 'sources' @@ -90,13 +67,6 @@ subprojects { archives sourcesJar, javadocJar, jar } - repositories { - maven { url 'http://repo.spring.io/milestone' } - maven { url 'https://oss.jfrog.org/libs-snapshot' } - maven { url 'https://dl.bintray.com/rsocket/RSocket' } - maven { url 'https://dl.bintray.com/reactivesocket/ReactiveSocket' } - } - dependencies { compile "io.projectreactor:reactor-core:3.1.0.RELEASE" compile "io.netty:netty-buffer:4.1.15.Final" diff --git a/gradle/benchmark.gradle b/gradle/benchmark.gradle new file mode 100644 index 000000000..21d4186ad --- /dev/null +++ b/gradle/benchmark.gradle @@ -0,0 +1,51 @@ +apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'me.champeau.gradle.jmh' +apply plugin: 'io.morethan.jmhreport' + +// disable tasks to stop generating duplicate files +jmhClasses.enabled = false +jmhRunBytecodeGenerator.enabled = false +jmhCompileGeneratedClasses.enabled = false + +jmhJar { + // add jmh classes to shadow jar + from project.configurations.jmh + from project.configurations.jmhRuntime + + // exclude logging classes + exclude 'org.slf4j:slf4j-log4j12' + exclude 'log4j:log4j' +} + +jmh { + jmhVersion = '1.19' + includeTests = false + duplicateClassesStrategy = DuplicatesStrategy.WARN + zip64 = true + + jvmArgs = ['-XX:+UnlockCommercialFeatures', '-XX:+FlightRecorder'] + // NOTE: uncomment to add specific options + // jvmArgsAppend = ['-XX:+UseG1GC', '-Xms4g', '-Xmx4g'] + profilers = ['gc'] + resultFormat = 'JSON' +} + +// run report generation after benchmark +tasks.jmh.finalizedBy tasks.jmhReport + +jmhReport { + jmhResultPath = project.file('build/reports/jmh/results.json') + jmhReportOutput = project.file('build/reports/jmh') +} + +// remove directory generated by IDEA during benchmark +clean { + project.delete('out') +} + +dependencies { + jmh "org.openjdk.jmh:jmh-core:${jmh.jmhVersion}" + jmh "org.openjdk.jmh:jmh-generator-annprocess:${jmh.jmhVersion}" + + jmhRuntime "org.slf4j:slf4j-nop:$slf4jVersion" +} \ No newline at end of file diff --git a/gradle/codestyle.gradle b/gradle/codestyle.gradle new file mode 100644 index 000000000..42e3fa124 --- /dev/null +++ b/gradle/codestyle.gradle @@ -0,0 +1,11 @@ +/* Format the Java source code to comply with Google Style */ + +apply plugin: 'com.github.sherter.google-java-format' + +// Use specific version +googleJavaFormat { + toolVersion = '1.1' +} + +// NOTE: uncomment to force code formatting before compile +compileJava.dependsOn tasks.googleJavaFormat \ No newline at end of file diff --git a/gradle/configuration.gradle b/gradle/configuration.gradle new file mode 100644 index 000000000..ad3de5adf --- /dev/null +++ b/gradle/configuration.gradle @@ -0,0 +1,17 @@ +task wrapper(type: Wrapper) { + gradleVersion = '4.1' + distributionType = Wrapper.DistributionType.ALL +} + +repositories { + jcenter() +} + +subprojects { + repositories { + maven { url 'http://repo.spring.io/milestone' } + maven { url 'https://oss.jfrog.org/libs-snapshot' } + maven { url 'https://dl.bintray.com/rsocket/RSocket' } + maven { url 'https://dl.bintray.com/reactivesocket/ReactiveSocket' } + } +} \ No newline at end of file diff --git a/gradle/java.gradle b/gradle/java.gradle new file mode 100644 index 000000000..222e8b48d --- /dev/null +++ b/gradle/java.gradle @@ -0,0 +1,13 @@ +/* Java compiler settings */ + +apply plugin: 'java' + +compileJava { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + options.encoding = 'UTF-8' + options.compilerArgs << '-Xlint:all,-cast,-fallthrough,-overloads,-rawtypes,-serial,-try,-unchecked' + // NOTE: uncomment to include/exclude specific warnings + // << '-Xlint:classfile,deprecation,dep-ann,divzero,empty,finally,options,overrides,path,processing,static,varargs' + // << '-Xdoclint:all,-accessibility,-syntax,-reference,-html,-missing/public' +} \ No newline at end of file diff --git a/gradle/versions.gradle b/gradle/versions.gradle new file mode 100644 index 000000000..f5588edb7 --- /dev/null +++ b/gradle/versions.gradle @@ -0,0 +1,24 @@ +ext { + // common + jsr305Version = '3.0.2' + reactorVersion = '3.1.0.RELEASE' + nettyVersion = '4.1.16.Final' + reactiveStreamsVersion = '1.0.1' + slf4jVersion = '1.7.25' + // aeron + aeronVersion = '1.4.1' + // netty + reactorNettyVersion = '0.7.0.RELEASE' + // spectator + spectatorVersion = '0.57.1' + hdrHistogramVersion = '2.1.10' + // tck-drivers + jacksonVersion = '2.9.1' + commonsLang3Version = '3.6' + airlineVersion = '0.8' + rxjavaVersion = '2.1.4' + // test + junitVersion = '4.12' + hamcrestVersion = '1.3' + mockitoVersion = '2.10.0' +} \ No newline at end of file diff --git a/rsocket-core/build.gradle b/rsocket-core/build.gradle index 7a026d3d2..ca9d86849 100644 --- a/rsocket-core/build.gradle +++ b/rsocket-core/build.gradle @@ -14,16 +14,7 @@ * limitations under the License. */ -apply plugin: 'me.champeau.gradle.jmh' +apply from: "$rootDir/gradle/benchmark.gradle" -jmh { - jmhVersion = "1.19" - profilers = ['gc'] - zip64 = true - duplicateClassesStrategy = DuplicatesStrategy.WARN -} - -dependencies { - jmh "org.openjdk.jmh:jmh-core:1.19" - jmh "org.openjdk.jmh:jmh-generator-annprocess:1.19" -} +// NOTE: uncomment to run specific test only +// jmh.include = ['io.rsocket.RSocketPerf.fireAndForgetHello'] \ No newline at end of file diff --git a/rsocket-core/src/jmh/java/io/rsocket/FragmentationPerf.java b/rsocket-core/src/jmh/java/io/rsocket/FragmentationPerf.java index 1eefc3452..08f6f2a91 100644 --- a/rsocket-core/src/jmh/java/io/rsocket/FragmentationPerf.java +++ b/rsocket-core/src/jmh/java/io/rsocket/FragmentationPerf.java @@ -19,9 +19,8 @@ @BenchmarkMode(Mode.Throughput) @Fork( - value = 1, - jvmArgsAppend = {"-XX:+UnlockCommercialFeatures", "-XX:+FlightRecorder"} -) //, "-Dio.netty.leakDetection.level=advanced"}) + value = 1 // , jvmArgsAppend = {"-Dio.netty.leakDetection.level=advanced"} +) @Warmup(iterations = 10) @Measurement(iterations = 10_000) @State(Scope.Thread) diff --git a/rsocket-core/src/jmh/java/io/rsocket/RSocketPerf.java b/rsocket-core/src/jmh/java/io/rsocket/RSocketPerf.java index 1c8ff726b..0ae66c584 100644 --- a/rsocket-core/src/jmh/java/io/rsocket/RSocketPerf.java +++ b/rsocket-core/src/jmh/java/io/rsocket/RSocketPerf.java @@ -41,8 +41,7 @@ @BenchmarkMode(Mode.Throughput) @Fork( - value = 1, - jvmArgsAppend = {"-XX:+UnlockCommercialFeatures", "-XX:+FlightRecorder"} + value = 1 // , jvmArgsAppend = {"-Dio.netty.leakDetection.level=advanced"} ) @Warmup(iterations = 10) @Measurement(iterations = 10) diff --git a/rsocket-examples/build.gradle b/rsocket-examples/build.gradle index fd154cf64..b0f17c9d0 100644 --- a/rsocket-examples/build.gradle +++ b/rsocket-examples/build.gradle @@ -14,25 +14,11 @@ * limitations under the License. */ -apply plugin: 'me.champeau.gradle.jmh' - -jmh { - jmhVersion = "1.19" - jvmArgs = ['-XX:+UseG1GC', '-Xmx4g', '-Xms4g', '-XX:+UnlockCommercialFeatures', '-XX:+FlightRecorder'] - profilers = ['gc'] - zip64 = true - warmupBatchSize = 10 - iterations = 500 - duplicateClassesStrategy = DuplicatesStrategy.WARN -} - dependencies { compile project(':rsocket-core') compile project(':rsocket-spectator') compile project(':rsocket-transport-netty') compile project(':rsocket-transport-local') - jmh "org.openjdk.jmh:jmh-generator-annprocess:1.19" - testCompile project(':rsocket-test') -} +} \ No newline at end of file