From dc25bc0d93eccfd76348d4d55b72fe72385f3b98 Mon Sep 17 00:00:00 2001 From: Steven J Schroeder Date: Sat, 5 Jan 2019 17:25:50 -0600 Subject: [PATCH 1/5] Use new Gradle Plugin DSL, remove redundant plugin applys. --- artemis/build.gradle | 2 -- build.gradle | 2 +- crypto/build.gradle | 2 -- errorprone-checks/build.gradle | 13 +++++-------- ethereum/core/build.gradle | 2 -- ethereum/rlp/build.gradle | 2 -- pow/build.gradle | 6 ------ util/build.gradle | 2 -- 8 files changed, 6 insertions(+), 25 deletions(-) diff --git a/artemis/build.gradle b/artemis/build.gradle index 91f12912077..0dd2f743476 100644 --- a/artemis/build.gradle +++ b/artemis/build.gradle @@ -1,5 +1,3 @@ -apply plugin: 'java-library' - jar { baseName 'artemis' manifest { diff --git a/build.gradle b/build.gradle index 6261ff8a473..0f60748a8ec 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { id 'com.github.hierynomus.license' version '0.15.0' id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'me.champeau.gradle.jmh' version '0.4.7' apply false - id 'net.ltgt.errorprone' version '0.6' + id 'net.ltgt.errorprone' version '0.6' apply false id 'net.researchgate.release' version '2.7.0' } diff --git a/crypto/build.gradle b/crypto/build.gradle index b8e8fa100b2..fdaaa864cfa 100644 --- a/crypto/build.gradle +++ b/crypto/build.gradle @@ -1,5 +1,3 @@ -apply plugin: 'java-library' - jar { baseName 'artemis-crypto' manifest { diff --git a/errorprone-checks/build.gradle b/errorprone-checks/build.gradle index 94787946c79..2315cd8278f 100644 --- a/errorprone-checks/build.gradle +++ b/errorprone-checks/build.gradle @@ -1,21 +1,18 @@ -// See https://github.com/tbroyer/gradle-errorprone-plugin // See https://github.com/tbroyer/gradle-apt-plugin -plugins { id 'net.ltgt.apt' version '0.19' apply false } +// TODO Determine if net.ltgt.apt is even necessary. + +plugins { + id 'net.ltgt.apt' version '0.19' +} // we use this config to get the path of the JDK 9 javac jar, to // stick it in the bootclasspath when running tests configurations.maybeCreate("epJavac") - -apply plugin: 'java' -apply plugin: 'net.ltgt.errorprone' -apply plugin: 'net.ltgt.apt' - sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { - implementation 'com.google.errorprone:error_prone_annotation' implementation 'com.google.errorprone:error_prone_core' implementation 'com.google.auto.service:auto-service' diff --git a/ethereum/core/build.gradle b/ethereum/core/build.gradle index e6d04210230..fc269be0571 100644 --- a/ethereum/core/build.gradle +++ b/ethereum/core/build.gradle @@ -1,5 +1,3 @@ -apply plugin: 'java-library' - jar { baseName 'artemis-core' manifest { diff --git a/ethereum/rlp/build.gradle b/ethereum/rlp/build.gradle index 31da69b8a4e..e35d1338307 100644 --- a/ethereum/rlp/build.gradle +++ b/ethereum/rlp/build.gradle @@ -1,5 +1,3 @@ -apply plugin: 'java-library' - jar { baseName 'artemis-ethereum-rlp' manifest { diff --git a/pow/build.gradle b/pow/build.gradle index 803403df6f5..bae55839fef 100644 --- a/pow/build.gradle +++ b/pow/build.gradle @@ -1,9 +1,3 @@ -plugins { - id 'java' -} - -apply plugin: 'java-library' - jar { baseName 'artemis-pow' manifest { diff --git a/util/build.gradle b/util/build.gradle index 48278fa68b3..213d6a38713 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -1,5 +1,3 @@ -apply plugin: 'java-library' - jar { baseName 'beaconchain-util' manifest { From 89a164749960eb0be1b497156b88f3d8191bc08b Mon Sep 17 00:00:00 2001 From: Steven J Schroeder Date: Sat, 5 Jan 2019 19:30:02 -0600 Subject: [PATCH 2/5] Correct ethereum rlp jmh test bench package. --- .../pegasys/artemis}/ethereum/rlp/RLPBench.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ethereum/rlp/src/jmh/java/{net/consensys/beaconchain => tech/pegasys/artemis}/ethereum/rlp/RLPBench.java (100%) diff --git a/ethereum/rlp/src/jmh/java/net/consensys/beaconchain/ethereum/rlp/RLPBench.java b/ethereum/rlp/src/jmh/java/tech/pegasys/artemis/ethereum/rlp/RLPBench.java similarity index 100% rename from ethereum/rlp/src/jmh/java/net/consensys/beaconchain/ethereum/rlp/RLPBench.java rename to ethereum/rlp/src/jmh/java/tech/pegasys/artemis/ethereum/rlp/RLPBench.java From 2a756521101e514c90b71faefc303bdbd82fdac7 Mon Sep 17 00:00:00 2001 From: Steven J Schroeder Date: Sat, 5 Jan 2019 20:19:13 -0600 Subject: [PATCH 3/5] Move JMH logic to ethereum/rlp...it's the only place it's used. --- build.gradle | 43 ----------------------------------- ethereum/rlp/build.gradle | 47 ++++++++++++++++++++++++++++++++++++--- gradle/versions.gradle | 1 - 3 files changed, 44 insertions(+), 47 deletions(-) diff --git a/build.gradle b/build.gradle index 0f60748a8ec..7bae5fbabc5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,6 @@ plugins { id 'com.github.ben-manes.versions' version '0.20.0' id 'com.github.hierynomus.license' version '0.15.0' id 'io.spring.dependency-management' version '1.0.6.RELEASE' - id 'me.champeau.gradle.jmh' version '0.4.7' apply false id 'net.ltgt.errorprone' version '0.6' apply false id 'net.researchgate.release' version '2.7.0' } @@ -26,26 +25,6 @@ gradle.startParameter.taskNames.each { } gradle.startParameter.taskNames = expandedTaskList.flatten() -// Gets a integer command argument, passed with -Pname=x, or the defaut if not provided. -def _intCmdArg(name, defaultValue) { - return project.hasProperty(name) ? project.property(name) as int : defaultValue -} - -def _intCmdArg(name) { - return _intCmdArg(name, null) -} - -def _strListCmdArg(name, defaultValue) { - if (!project.hasProperty(name)) - return defaultValue - - return ((String)project.property(name)).tokenize(',') -} - -def _strListCmdArg(name) { - return _strListCmdArg(name, null) -} - def baseVersion = '1.0.0'; project.version = baseVersion + '-SNAPSHOT' @@ -241,28 +220,6 @@ subprojects { classpath = sourceSets.integrationTest.runtimeClasspath outputs.upToDateWhen { false } } - - if (file('src/jmh').directory) { - apply plugin: 'me.champeau.gradle.jmh' - - jmh { - // Allows to control JMH execution directly from the command line. I typical execution may look - // like: - // gradle jmh -Pf=2 -Pwi=3 -Pi=5 -Pinclude=MyBench - // which will run 2 forks with 3 warmup iterations and 5 normal ones for each, and will only - // run the benchmark matching 'MyBench' (a regexp). - warmupForks = _intCmdArg('wf') - warmupIterations = _intCmdArg('wi') - fork = _intCmdArg('f') - iterations = _intCmdArg('i') - benchmarkMode = _strListCmdArg('bm') - include = _strListCmdArg('include', ['']) - humanOutputFile = project.file("${project.buildDir}/reports/jmh/results.txt") - resultFormat = 'JSON' - } - - dependencies { jmh 'org.apache.logging.log4j:log4j-api' } - } } jar { enabled = false } diff --git a/ethereum/rlp/build.gradle b/ethereum/rlp/build.gradle index e35d1338307..5bf4fb17fc0 100644 --- a/ethereum/rlp/build.gradle +++ b/ethereum/rlp/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'me.champeau.gradle.jmh' version '0.4.7' +} + jar { baseName 'artemis-ethereum-rlp' manifest { @@ -12,10 +16,47 @@ dependencies { implementation 'com.google.guava:guava' implementation 'io.vertx:vertx-core' - compileOnly 'org.openjdk.jmh:jmh-generator-annprocess' + testImplementation 'com.fasterxml.jackson.core:jackson-databind' + testImplementation 'junit:junit' + //Dependencies for JMH testing RLPBench jmh project(':util') +} - testImplementation 'com.fasterxml.jackson.core:jackson-databind' - testImplementation 'junit:junit' +//JMH Configuration Below + +jmh { + // Allows to control JMH execution directly from the command line. I typical execution may look + // like: + // gradle jmh -Pf=2 -Pwi=3 -Pi=5 -Pinclude=MyBench + // which will run 2 forks with 3 warmup iterations and 5 normal ones for each, and will only + // run the benchmark matching 'MyBench' (a regexp). + warmupForks = _intCmdArg('wf') + warmupIterations = _intCmdArg('wi') + fork = _intCmdArg('f') + iterations = _intCmdArg('i') + benchmarkMode = _strListCmdArg('bm') + include = _strListCmdArg('include', ['']) + humanOutputFile = project.file("${project.buildDir}/reports/jmh/results.txt") + resultFormat = 'JSON' +} + +// Gets a integer command argument, passed with -Pname=x, or the defaut if not provided. +def _intCmdArg(name, defaultValue) { + return project.hasProperty(name) ? project.property(name) as int : defaultValue +} + +def _intCmdArg(name) { + return _intCmdArg(name, null) +} + +def _strListCmdArg(name, defaultValue) { + if (!project.hasProperty(name)) + return defaultValue + + return ((String)project.property(name)).tokenize(',') +} + +def _strListCmdArg(name) { + return _strListCmdArg(name, null) } diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 51a7048190c..8585b8ce726 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -53,7 +53,6 @@ dependencyManagement { dependency 'org.mockito:mockito-core:2.23.4' dependency 'org.openjdk.jmh:jmh-core:1.21' - dependency 'org.openjdk.jmh:jmh-generator-annprocess:1.21' dependency 'org.rocksdb:rocksdbjni:5.15.10' From 67ff4c70df120f45a86d25892805c2f81d5fd522 Mon Sep 17 00:00:00 2001 From: Steven J Schroeder Date: Sat, 5 Jan 2019 22:22:00 -0600 Subject: [PATCH 4/5] Resolve circular dependency in gradle build. --- build.gradle | 4 ++-- crypto/build.gradle | 2 -- crypto/src/main/java/tech/pegasys/artemis/crypto/Hash.java | 1 + .../java/tech/pegasys/artemis/ethereum/core/AddressTest.java | 3 +-- ethereum/rlp/build.gradle | 1 + gradle/check-licenses.gradle | 4 +++- util/build.gradle | 2 +- .../util/message}/BouncyCastleMessageDigestFactory.java | 2 +- .../java/tech/pegasys/artemis/util/bytes/BytesValueTest.java | 2 +- 9 files changed, 11 insertions(+), 10 deletions(-) rename {crypto/src/main/java/tech/pegasys/artemis/crypto => util/src/main/java/tech/pegasys/artemis/util/message}/BouncyCastleMessageDigestFactory.java (96%) diff --git a/build.gradle b/build.gradle index 7bae5fbabc5..a7903d2d472 100644 --- a/build.gradle +++ b/build.gradle @@ -10,12 +10,12 @@ plugins { id 'net.researchgate.release' version '2.7.0' } -defaultTasks 'build','checkLicense' +defaultTasks 'build','checkLicenses' def buildAliases = ['dev': [ 'spotlessApply', 'build', - 'checkLicense', + 'checkLicenses', 'javadoc' ]] diff --git a/crypto/build.gradle b/crypto/build.gradle index fdaaa864cfa..33562769363 100644 --- a/crypto/build.gradle +++ b/crypto/build.gradle @@ -9,8 +9,6 @@ jar { dependencies { api project(':util') - api 'org.bouncycastle:bcprov-jdk15on' - implementation 'com.google.guava:guava' testImplementation 'org.assertj:assertj-core' diff --git a/crypto/src/main/java/tech/pegasys/artemis/crypto/Hash.java b/crypto/src/main/java/tech/pegasys/artemis/crypto/Hash.java index 6391b1c8138..36b75cc6398 100644 --- a/crypto/src/main/java/tech/pegasys/artemis/crypto/Hash.java +++ b/crypto/src/main/java/tech/pegasys/artemis/crypto/Hash.java @@ -15,6 +15,7 @@ import tech.pegasys.artemis.util.bytes.Bytes32; import tech.pegasys.artemis.util.bytes.BytesValue; +import tech.pegasys.artemis.util.message.BouncyCastleMessageDigestFactory; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/ethereum/core/src/test/java/tech/pegasys/artemis/ethereum/core/AddressTest.java b/ethereum/core/src/test/java/tech/pegasys/artemis/ethereum/core/AddressTest.java index ac2d8ca6114..b13fc5de942 100644 --- a/ethereum/core/src/test/java/tech/pegasys/artemis/ethereum/core/AddressTest.java +++ b/ethereum/core/src/test/java/tech/pegasys/artemis/ethereum/core/AddressTest.java @@ -11,9 +11,8 @@ * specific language governing permissions and limitations under the License. */ -package tech.pegasys.artemis.ethereum.vm; +package tech.pegasys.artemis.ethereum.core; -import tech.pegasys.artemis.ethereum.core.Address; import tech.pegasys.artemis.util.bytes.BytesValue; import org.junit.Assert; diff --git a/ethereum/rlp/build.gradle b/ethereum/rlp/build.gradle index 5bf4fb17fc0..51d63773bcb 100644 --- a/ethereum/rlp/build.gradle +++ b/ethereum/rlp/build.gradle @@ -21,6 +21,7 @@ dependencies { //Dependencies for JMH testing RLPBench jmh project(':util') + compile 'org.openjdk.jmh:jmh-core' } //JMH Configuration Below diff --git a/gradle/check-licenses.gradle b/gradle/check-licenses.gradle index e6c4ca82d40..05a998932b7 100644 --- a/gradle/check-licenses.gradle +++ b/gradle/check-licenses.gradle @@ -140,7 +140,9 @@ downloadLicenses { (group('org.glassfish.jersey.bundles.repackaged')): apache, (group('org.glassfish.jersey.connectors')): apache, //Explicitly declare EPL 2.0 for jnr-poxix - it is simultaneously licensed under 3 licenses. - 'com.github.jnr:jnr-posix:3.0.33': epl2_0 + 'com.github.jnr:jnr-posix:3.0.33': epl2_0, + //JMH-Core is licensed under GPLv2 with the Classpath Exception, which allows us to link it and license the derived work under our license. + 'org.openjdk.jmh:jmh-core:1.21': apache ] } diff --git a/util/build.gradle b/util/build.gradle index 213d6a38713..a7a342d9d21 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -7,10 +7,10 @@ jar { } dependencies { + api 'org.bouncycastle:bcprov-jdk15on' implementation 'com.google.guava:guava' implementation 'io.vertx:vertx-core' implementation 'io.netty:netty-common' - testImplementation project(":crypto") testImplementation 'junit:junit' testImplementation 'org.assertj:assertj-core' testImplementation 'org.mockito:mockito-core' diff --git a/crypto/src/main/java/tech/pegasys/artemis/crypto/BouncyCastleMessageDigestFactory.java b/util/src/main/java/tech/pegasys/artemis/util/message/BouncyCastleMessageDigestFactory.java similarity index 96% rename from crypto/src/main/java/tech/pegasys/artemis/crypto/BouncyCastleMessageDigestFactory.java rename to util/src/main/java/tech/pegasys/artemis/util/message/BouncyCastleMessageDigestFactory.java index 33915799e5c..82c550ff7e2 100644 --- a/crypto/src/main/java/tech/pegasys/artemis/crypto/BouncyCastleMessageDigestFactory.java +++ b/util/src/main/java/tech/pegasys/artemis/util/message/BouncyCastleMessageDigestFactory.java @@ -11,7 +11,7 @@ * specific language governing permissions and limitations under the License. */ -package tech.pegasys.artemis.crypto; +package tech.pegasys.artemis.util.message; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/util/src/test/java/tech/pegasys/artemis/util/bytes/BytesValueTest.java b/util/src/test/java/tech/pegasys/artemis/util/bytes/BytesValueTest.java index 28076a96c87..98662c5b037 100644 --- a/util/src/test/java/tech/pegasys/artemis/util/bytes/BytesValueTest.java +++ b/util/src/test/java/tech/pegasys/artemis/util/bytes/BytesValueTest.java @@ -24,7 +24,7 @@ import static tech.pegasys.artemis.util.bytes.BytesValue.wrap; import static tech.pegasys.artemis.util.bytes.BytesValue.wrapBuffer; -import tech.pegasys.artemis.crypto.BouncyCastleMessageDigestFactory; +import tech.pegasys.artemis.util.message.BouncyCastleMessageDigestFactory; import java.math.BigInteger; import java.security.MessageDigest; From 2438760ab967867f7043fd972f25edf93d38e0ff Mon Sep 17 00:00:00 2001 From: Steven J Schroeder Date: Sun, 6 Jan 2019 00:03:49 -0600 Subject: [PATCH 5/5] Move common dependencies to common location, general cleanup in pow build. --- artemis/build.gradle | 7 +++---- build.gradle | 3 +++ crypto/build.gradle | 3 --- errorprone-checks/build.gradle | 2 -- ethereum/core/build.gradle | 2 -- ethereum/rlp/build.gradle | 1 - pow/build.gradle | 25 ++++++------------------- util/build.gradle | 4 ++-- 8 files changed, 14 insertions(+), 33 deletions(-) diff --git a/artemis/build.gradle b/artemis/build.gradle index 0dd2f743476..58cd6715934 100644 --- a/artemis/build.gradle +++ b/artemis/build.gradle @@ -12,6 +12,8 @@ dependencies { implementation project(':ethereum:rlp') implementation project(':pow') + api 'com.google.guava:guava:27.0.1-jre' + implementation 'com.google.guava:guava' implementation 'com.google.code.gson:gson:2.8.5' implementation 'info.picocli:picocli' @@ -21,14 +23,11 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-api' implementation 'org.slf4j:slf4j-nop:1.7.25' - runtime 'org.apache.logging.log4j:log4j-core' + runtimeOnly 'org.apache.logging.log4j:log4j-core' testImplementation 'com.squareup.okhttp3:okhttp' - testImplementation 'junit:junit' testImplementation 'org.awaitility:awaitility' - testImplementation 'org.assertj:assertj-core' testImplementation 'org.mockito:mockito-core' - api 'com.google.guava:guava:27.0.1-jre' test { testLogging.showStandardStreams = true diff --git a/build.gradle b/build.gradle index a7903d2d472..c92d0138a99 100644 --- a/build.gradle +++ b/build.gradle @@ -210,6 +210,9 @@ subprojects { dependencies { testImplementation sourceSets.testSupport.output integrationTestImplementation sourceSets.testSupport.output + + testImplementation 'junit:junit' + testImplementation 'org.assertj:assertj-core' } task integrationTest(type: Test, dependsOn:["compileTestJava"]){ diff --git a/crypto/build.gradle b/crypto/build.gradle index 33562769363..2d1892b2742 100644 --- a/crypto/build.gradle +++ b/crypto/build.gradle @@ -10,7 +10,4 @@ dependencies { api project(':util') implementation 'com.google.guava:guava' - - testImplementation 'org.assertj:assertj-core' - testImplementation 'junit:junit' } diff --git a/errorprone-checks/build.gradle b/errorprone-checks/build.gradle index 2315cd8278f..19bf985bd94 100644 --- a/errorprone-checks/build.gradle +++ b/errorprone-checks/build.gradle @@ -20,8 +20,6 @@ dependencies { annotationProcessor 'com.google.auto.service:auto-service' testImplementation 'com.google.errorprone:error_prone_test_helpers' - testImplementation 'junit:junit' - testImplementation 'org.assertj:assertj-core' epJavac 'com.google.errorprone:error_prone_check_api' } diff --git a/ethereum/core/build.gradle b/ethereum/core/build.gradle index fc269be0571..00c696e35a1 100644 --- a/ethereum/core/build.gradle +++ b/ethereum/core/build.gradle @@ -17,9 +17,7 @@ dependencies { runtime 'org.apache.logging.log4j:log4j-core' - testImplementation 'org.assertj:assertj-core' testImplementation 'org.mockito:mockito-core' - testImplementation 'junit:junit' integrationTestImplementation 'org.assertj:assertj-core' integrationTestImplementation 'org.mockito:mockito-core' diff --git a/ethereum/rlp/build.gradle b/ethereum/rlp/build.gradle index 51d63773bcb..16b2183942f 100644 --- a/ethereum/rlp/build.gradle +++ b/ethereum/rlp/build.gradle @@ -17,7 +17,6 @@ dependencies { implementation 'io.vertx:vertx-core' testImplementation 'com.fasterxml.jackson.core:jackson-databind' - testImplementation 'junit:junit' //Dependencies for JMH testing RLPBench jmh project(':util') diff --git a/pow/build.gradle b/pow/build.gradle index bae55839fef..0ac426f8e5e 100644 --- a/pow/build.gradle +++ b/pow/build.gradle @@ -7,26 +7,13 @@ jar { } dependencies { - api 'org.bouncycastle:bcprov-jdk15on' - api 'io.reactivex:rxjava:1.2.4' - api 'com.squareup.okhttp3:okhttp:3.8.1' - api 'com.squareup.okhttp3:logging-interceptor:3.8.1' - api 'org.web3j:abi:3.6.0' + //TODO org.web3j.abi and org.web3j.cyprto are used by org.web3j.core. Given that, is it necessary to export all 3 as API dependencies, or will just org.web3j.core suffice? api 'org.web3j:core:3.6.0' + api 'org.web3j:abi:3.6.0' api 'org.web3j:crypto:3.6.0' - implementation 'com.google.guava:guava' - - testImplementation 'org.assertj:assertj-core' - testImplementation 'junit:junit' -} -version '1.0.0-SNAPSHOT' -sourceCompatibility = 1.8 - -repositories { - mavenCentral() -} - -dependencies { - testCompile group: 'junit', name: 'junit', version: '4.12' + implementation 'io.reactivex:rxjava:1.2.4' + implementation 'com.squareup.okhttp3:okhttp:3.8.1' + implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1' + implementation 'com.google.guava:guava' } diff --git a/util/build.gradle b/util/build.gradle index a7a342d9d21..dacab815be3 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -8,10 +8,10 @@ jar { dependencies { api 'org.bouncycastle:bcprov-jdk15on' + implementation 'com.google.guava:guava' implementation 'io.vertx:vertx-core' implementation 'io.netty:netty-common' - testImplementation 'junit:junit' - testImplementation 'org.assertj:assertj-core' + testImplementation 'org.mockito:mockito-core' }