From c344e0d10a66b723a5e668fb25a8abd39e57eb26 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:16:37 +0100 Subject: [PATCH 01/38] Remove obsolete desktop/settings.gradle This was vestige from when desktop was managed as a separate repository. --- desktop/settings.gradle | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 desktop/settings.gradle diff --git a/desktop/settings.gradle b/desktop/settings.gradle deleted file mode 100644 index cb072c03a8e..00000000000 --- a/desktop/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'bisq-desktop' -include 'common', 'core', 'p2p', 'assets' \ No newline at end of file From b460894e4d402d8938063cb8d629727fb964b91a Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:26:57 +0100 Subject: [PATCH 02/38] Refactor gradle-witness plugin location and config - Move gradle-witness.jar to top level - Extract gradle-witness.gradle build file to top level Moving these files out of the gradle/ dir and the main build file to the top level of the repository calls them out and makes their presence and function more obvious. It also removes a lot of noise from the main build file. --- desktop/build.gradle | 81 +----------------- desktop/gradle-witness.gradle | 76 ++++++++++++++++ .../{gradle/witness => }/gradle-witness.jar | Bin desktop/gradle/witness/README.md | 1 - 4 files changed, 80 insertions(+), 78 deletions(-) create mode 100644 desktop/gradle-witness.gradle rename desktop/{gradle/witness => }/gradle-witness.jar (100%) delete mode 100644 desktop/gradle/witness/README.md diff --git a/desktop/build.gradle b/desktop/build.gradle index 69e5c4bf7ce..975635fd2c8 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -4,20 +4,22 @@ buildscript { } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' - classpath files('gradle/witness/gradle-witness.jar') classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' + classpath files('gradle-witness.jar') } } apply plugin: 'java' apply plugin: 'application' apply plugin: 'maven' -apply plugin: 'witness' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'com.google.osdetector' +apply plugin: 'witness' +apply from: 'gradle-witness.gradle' ext.platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os + group = 'network.bisq' version = '0.8.0-SNAPSHOT' @@ -83,78 +85,3 @@ test { } build.dependsOn installDist installDist.destinationDir = file('build/app') - -// To update the `dependencyVerification` block below: -// -// 1. Remove the block entirely -// 2. Replace the block with the following command: -// -// ./gradlew -q calculateChecksums | grep -v network.bisq >> desktop/build.gradle -// -// 3. Run `git diff` to verify that expected hashes have changed -// 4. Commit the changes - -dependencyVerification { - verify = [ - 'org.controlsfx:controlsfx:b98f1c9507c05600f80323674b33d15674926c71b0116f70085b62bdacf1e573', - 'org.reactfx:reactfx:81ec8fe545d65661222735711114c2ce427e2187a65f1722e8ac4e4805beeca3', - 'net.glxn:qrgen:c85d9d8512d91e8ad11fe56259a7825bd50ce0245447e236cf168d1b17591882', - 'de.jensd:fontawesomefx:73bacc991a0a6f5cf0f911767c8db161e0949dbca61e8371eb4342e3da96887b', - 'de.jensd:fontawesomefx-materialdesignfont:dbad8dfdd1c85e298d5bbae25b2399aec9e85064db57b2427d10f3815aa98752', - 'de.jensd:fontawesomefx-commons:5539bb3335ecb822dbf928546f57766eeb9f1516cc1417a064b5709629612149', - 'com.googlecode.jcsv:jcsv:73ca7d715e90c8d2c2635cc284543b038245a34f70790660ed590e157b8714a2', - 'com.github.sarxos:webcam-capture:d960b7ea8ec3ddf2df0725ef214c3fccc9699ea7772df37f544e1f8e4fd665f6', - 'com.github.JesusMcCloud.netlayer:tor.native:de44e782b21838d3426dbff99abbfd1cbb8e5d3f6d5e997441ff4fd8354934fa', - 'org.apache.httpcomponents:httpclient:db3d1b6c2d6a5e5ad47577ad61854e2f0e0936199b8e05eb541ed52349263135', - 'net.sf.jopt-simple:jopt-simple:6f45c00908265947c39221035250024f2caec9a15c1c8cf553ebeecee289f342', - 'org.fxmisc.easybind:easybind:666af296dda6de68751668a62661571b5238ac6f1c07c8a204fc6f902b222aaf', - 'com.fasterxml.jackson.core:jackson-databind:fcf3c2b0c332f5f54604f7e27fa7ee502378a2cc5df6a944bbfae391872c32ff', - 'com.fasterxml.jackson.core:jackson-core:39a74610521d7fb9eb3f437bb8739bbf47f6435be12d17bf954c731a0c6352bb', - 'com.fasterxml.jackson.core:jackson-annotations:2566b3a6662afa3c6af4f5b25006cb46be2efc68f1b5116291d6998a8cdf7ed3', - 'com.google.protobuf:protobuf-java:b5e2d91812d183c9f053ffeebcbcda034d4de6679521940a19064714966c2cd4', - 'com.google.code.gson:gson:2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32', - 'com.googlecode.json-simple:json-simple:4e69696892b88b41c55d49ab2fdcc21eead92bf54acc588c0050596c3b75199c', - 'org.springframework:spring-core:c451e8417adb2ffb2445636da5e44a2f59307c4100037a1fe387c3fba4f29b52', - 'ch.qos.logback:logback-classic:e66efc674e94837344bc5b748ff510c37a44eeff86cbfdbf9e714ef2eb374013', - 'org.slf4j:slf4j-api:3a4cd4969015f3beb4b5b4d81dbafc01765fb60b8a439955ca64d8476fef553e', - 'ch.qos.logback:logback-core:4cd46fa17d77057b39160058df2f21ebbc2aded51d0edcc25d2c1cecc042a005', - 'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd', - 'com.google.guava:guava:36a666e3b71ae7f0f0dca23654b67e086e6c93d192f60ba5dfd5519db6c288c8', - 'com.google.inject:guice:9b9df27a5b8c7864112b4137fd92b36c3f1395bfe57be42fedf2f520ead1a93e', - 'com.github.JesusMcCloud.netlayer:tor:3896950c56a41985f901ff9475524ac162cba18b2d5a0ed39810b20ddaf5128a', - 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:841b021d62fc007ce2883963ff9440d5393fb1f6a0604ed68cd016afcaf02967', - 'com.github.MicroUtils:kotlin-logging:7dbd501cc210d721f730d480c53ee2a6e3c154ae89b07dc7dee224b9c5aca9eb', - 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:bd8cd4e3ef391cd468434747b7939c49e80f8bf4ae10355a65382bfb54fd633c', - 'org.jetbrains.kotlin:kotlin-stdlib:e1c39d27f23a7fe2d3e4ac65e80a53e98fdcf60e07de9d53b8b841c5944fc810', - 'org.jetbrains:annotations:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478', - 'org.bouncycastle:bcpg-jdk15on:de3355b821fc81dd32e1f3f560d5b3eca1c678fd2400011d0bfc69fb91bcde85', - 'commons-io:commons-io:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581', - 'org.apache.commons:commons-lang3:734c8356420cc8e30c795d64fd1fcd5d44ea9d90342a2cc3262c5158fbc6d98b', - 'org.bouncycastle:bcprov-jdk15on:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349', - 'com.google.zxing:javase:0ec23e2ec12664ddd6347c8920ad647bb3b9da290f897a88516014b56cc77eb9', - 'com.nativelibs4java:bridj:101bcd9b6637e6bc16e56deb3daefba62b1f5e8e9e37e1b3e56e3b5860d659cf', - 'com.cedricwalter:tor-binary-macos:87790e9eade1e44eeadc81f92670f338cd47ef1b39b46a4b022c75d0cf6465fd', - 'com.cedricwalter:tor-binary-linux32:814f6da3b662c96490bcb09781764dd31dfe497ea9c25c73fe61170d2a78086f', - 'com.cedricwalter:tor-binary-linux64:9da7f8a166ad0a767a5373ca67c68971c9c0cac17964eed2e0850bfecc228312', - 'com.cedricwalter:tor-binary-windows:9487a735dadcadc6ede5ffad36a911c2d4a484f996be93d71094f26591b8c29e', - 'com.github.ravn:jsocks:3c71600af027b2b6d4244e4ad14d98ff2352a379410daebefff5d8cd48d742a4', - 'org.apache.httpcomponents:httpcore:d7f853dee87680b07293d30855b39b9eb56c1297bd16ff1cd6f19ddb8fa745fb', - 'commons-codec:commons-codec:ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce', - 'commons-logging:commons-logging:daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636', - 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', - 'aopalliance:aopalliance:0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08', - 'com.github.bisq-network.bitcoinj:bitcoinj-core:15e0f4304dd92259c4e9ff0114cbeab7a79abb51a5817b422ce629d3a0a2d551', - 'com.lambdaworks:scrypt:9a82d218099fb14c10c0e86e7eefeebd8c104de920acdc47b8b4b7a686fb73b4', - 'com.google.zxing:core:11aae8fd974ab25faa8208be50468eb12349cd239e93e7c797377fa13e381729', - 'com.cedricwalter:tor-binary-geoip:7fc7b5ebf80d65ec53d97dd8d3878b8d2c85dc04f3943e5e85e7ba641655492b', - 'com.github.JesusMcCloud:jtorctl:c6ef92e46074d8d26db718ce0fe4b64b8cf7b934b7377d164c5d613b4cd7b847', - 'org.apache.commons:commons-compress:a778bbd659722889245fc52a0ec2873fbbb89ec661bc1ad3dc043c0757c784c4', - 'org.tukaani:xz:a594643d73cc01928cf6ca5ce100e094ea9d73af760a5d4fb6b75fa673ecec96', - 'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f', - 'net.jcip:jcip-annotations:be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0', - 'org.bitcoinj:orchid:f836325cfa0466a011cb755c9b0fee6368487a2352eb45f4306ad9e4c18de080', - 'com.squareup.okhttp:okhttp:b4c943138fcef2bcc9d2006b2250c4aabbedeafc5947ed7c0af7fd103ceb2707', - 'org.objenesis:objenesis:5e168368fbc250af3c79aa5fef0c3467a2d64e5a7bd74005f25d8399aeb0708d', - 'com.squareup.okio:okio:114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266', - ] -} diff --git a/desktop/gradle-witness.gradle b/desktop/gradle-witness.gradle new file mode 100644 index 00000000000..0ff9b938f35 --- /dev/null +++ b/desktop/gradle-witness.gradle @@ -0,0 +1,76 @@ +// To update the `dependencyVerification` block below: +// +// 1. Remove the block entirely +// 2. Replace the block with the following command: +// +// ./gradlew -q calculateChecksums | grep -v network.bisq >> desktop/gradle-witness.gradle +// +// 3. Run `git diff` to verify that expected hashes have changed +// 4. Commit the changes +// +// See https://github.com/signalapp/gradle-witness#using-witness for further details. + +dependencyVerification { + verify = [ + 'org.controlsfx:controlsfx:b98f1c9507c05600f80323674b33d15674926c71b0116f70085b62bdacf1e573', + 'org.reactfx:reactfx:81ec8fe545d65661222735711114c2ce427e2187a65f1722e8ac4e4805beeca3', + 'net.glxn:qrgen:c85d9d8512d91e8ad11fe56259a7825bd50ce0245447e236cf168d1b17591882', + 'de.jensd:fontawesomefx:73bacc991a0a6f5cf0f911767c8db161e0949dbca61e8371eb4342e3da96887b', + 'de.jensd:fontawesomefx-materialdesignfont:dbad8dfdd1c85e298d5bbae25b2399aec9e85064db57b2427d10f3815aa98752', + 'de.jensd:fontawesomefx-commons:5539bb3335ecb822dbf928546f57766eeb9f1516cc1417a064b5709629612149', + 'com.googlecode.jcsv:jcsv:73ca7d715e90c8d2c2635cc284543b038245a34f70790660ed590e157b8714a2', + 'com.github.sarxos:webcam-capture:d960b7ea8ec3ddf2df0725ef214c3fccc9699ea7772df37f544e1f8e4fd665f6', + 'com.github.JesusMcCloud.netlayer:tor.native:de44e782b21838d3426dbff99abbfd1cbb8e5d3f6d5e997441ff4fd8354934fa', + 'org.apache.httpcomponents:httpclient:db3d1b6c2d6a5e5ad47577ad61854e2f0e0936199b8e05eb541ed52349263135', + 'net.sf.jopt-simple:jopt-simple:6f45c00908265947c39221035250024f2caec9a15c1c8cf553ebeecee289f342', + 'org.fxmisc.easybind:easybind:666af296dda6de68751668a62661571b5238ac6f1c07c8a204fc6f902b222aaf', + 'com.fasterxml.jackson.core:jackson-databind:fcf3c2b0c332f5f54604f7e27fa7ee502378a2cc5df6a944bbfae391872c32ff', + 'com.fasterxml.jackson.core:jackson-core:39a74610521d7fb9eb3f437bb8739bbf47f6435be12d17bf954c731a0c6352bb', + 'com.fasterxml.jackson.core:jackson-annotations:2566b3a6662afa3c6af4f5b25006cb46be2efc68f1b5116291d6998a8cdf7ed3', + 'com.google.protobuf:protobuf-java:b5e2d91812d183c9f053ffeebcbcda034d4de6679521940a19064714966c2cd4', + 'com.google.code.gson:gson:2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32', + 'com.googlecode.json-simple:json-simple:4e69696892b88b41c55d49ab2fdcc21eead92bf54acc588c0050596c3b75199c', + 'org.springframework:spring-core:c451e8417adb2ffb2445636da5e44a2f59307c4100037a1fe387c3fba4f29b52', + 'ch.qos.logback:logback-classic:e66efc674e94837344bc5b748ff510c37a44eeff86cbfdbf9e714ef2eb374013', + 'org.slf4j:slf4j-api:3a4cd4969015f3beb4b5b4d81dbafc01765fb60b8a439955ca64d8476fef553e', + 'ch.qos.logback:logback-core:4cd46fa17d77057b39160058df2f21ebbc2aded51d0edcc25d2c1cecc042a005', + 'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd', + 'com.google.guava:guava:36a666e3b71ae7f0f0dca23654b67e086e6c93d192f60ba5dfd5519db6c288c8', + 'com.google.inject:guice:9b9df27a5b8c7864112b4137fd92b36c3f1395bfe57be42fedf2f520ead1a93e', + 'com.github.JesusMcCloud.netlayer:tor:3896950c56a41985f901ff9475524ac162cba18b2d5a0ed39810b20ddaf5128a', + 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:841b021d62fc007ce2883963ff9440d5393fb1f6a0604ed68cd016afcaf02967', + 'com.github.MicroUtils:kotlin-logging:7dbd501cc210d721f730d480c53ee2a6e3c154ae89b07dc7dee224b9c5aca9eb', + 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:bd8cd4e3ef391cd468434747b7939c49e80f8bf4ae10355a65382bfb54fd633c', + 'org.jetbrains.kotlin:kotlin-stdlib:e1c39d27f23a7fe2d3e4ac65e80a53e98fdcf60e07de9d53b8b841c5944fc810', + 'org.jetbrains:annotations:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478', + 'org.bouncycastle:bcpg-jdk15on:de3355b821fc81dd32e1f3f560d5b3eca1c678fd2400011d0bfc69fb91bcde85', + 'commons-io:commons-io:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581', + 'org.apache.commons:commons-lang3:734c8356420cc8e30c795d64fd1fcd5d44ea9d90342a2cc3262c5158fbc6d98b', + 'org.bouncycastle:bcprov-jdk15on:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349', + 'com.google.zxing:javase:0ec23e2ec12664ddd6347c8920ad647bb3b9da290f897a88516014b56cc77eb9', + 'com.nativelibs4java:bridj:101bcd9b6637e6bc16e56deb3daefba62b1f5e8e9e37e1b3e56e3b5860d659cf', + 'com.cedricwalter:tor-binary-macos:87790e9eade1e44eeadc81f92670f338cd47ef1b39b46a4b022c75d0cf6465fd', + 'com.cedricwalter:tor-binary-linux32:814f6da3b662c96490bcb09781764dd31dfe497ea9c25c73fe61170d2a78086f', + 'com.cedricwalter:tor-binary-linux64:9da7f8a166ad0a767a5373ca67c68971c9c0cac17964eed2e0850bfecc228312', + 'com.cedricwalter:tor-binary-windows:9487a735dadcadc6ede5ffad36a911c2d4a484f996be93d71094f26591b8c29e', + 'com.github.ravn:jsocks:3c71600af027b2b6d4244e4ad14d98ff2352a379410daebefff5d8cd48d742a4', + 'org.apache.httpcomponents:httpcore:d7f853dee87680b07293d30855b39b9eb56c1297bd16ff1cd6f19ddb8fa745fb', + 'commons-codec:commons-codec:ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce', + 'commons-logging:commons-logging:daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636', + 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', + 'aopalliance:aopalliance:0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08', + 'com.github.bisq-network.bitcoinj:bitcoinj-core:15e0f4304dd92259c4e9ff0114cbeab7a79abb51a5817b422ce629d3a0a2d551', + 'com.lambdaworks:scrypt:9a82d218099fb14c10c0e86e7eefeebd8c104de920acdc47b8b4b7a686fb73b4', + 'com.google.zxing:core:11aae8fd974ab25faa8208be50468eb12349cd239e93e7c797377fa13e381729', + 'com.cedricwalter:tor-binary-geoip:7fc7b5ebf80d65ec53d97dd8d3878b8d2c85dc04f3943e5e85e7ba641655492b', + 'com.github.JesusMcCloud:jtorctl:c6ef92e46074d8d26db718ce0fe4b64b8cf7b934b7377d164c5d613b4cd7b847', + 'org.apache.commons:commons-compress:a778bbd659722889245fc52a0ec2873fbbb89ec661bc1ad3dc043c0757c784c4', + 'org.tukaani:xz:a594643d73cc01928cf6ca5ce100e094ea9d73af760a5d4fb6b75fa673ecec96', + 'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f', + 'net.jcip:jcip-annotations:be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0', + 'org.bitcoinj:orchid:f836325cfa0466a011cb755c9b0fee6368487a2352eb45f4306ad9e4c18de080', + 'com.squareup.okhttp:okhttp:b4c943138fcef2bcc9d2006b2250c4aabbedeafc5947ed7c0af7fd103ceb2707', + 'org.objenesis:objenesis:5e168368fbc250af3c79aa5fef0c3467a2d64e5a7bd74005f25d8399aeb0708d', + 'com.squareup.okio:okio:114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266', + ] +} diff --git a/desktop/gradle/witness/gradle-witness.jar b/desktop/gradle-witness.jar similarity index 100% rename from desktop/gradle/witness/gradle-witness.jar rename to desktop/gradle-witness.jar diff --git a/desktop/gradle/witness/README.md b/desktop/gradle/witness/README.md deleted file mode 100644 index ffef66c90a3..00000000000 --- a/desktop/gradle/witness/README.md +++ /dev/null @@ -1 +0,0 @@ -See https://github.com/signalapp/gradle-witness#using-witness From d3d3ea629ad8d03a7037de67962f5514352a825d Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:33:30 +0100 Subject: [PATCH 03/38] Remove obsolete gradle/wrapper dir This was a vestige from when desktop was managed as a separate repository. --- desktop/gradle/wrapper/gradle-wrapper.jar | Bin 54706 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 ------ 2 files changed, 6 deletions(-) delete mode 100644 desktop/gradle/wrapper/gradle-wrapper.jar delete mode 100644 desktop/gradle/wrapper/gradle-wrapper.properties diff --git a/desktop/gradle/wrapper/gradle-wrapper.jar b/desktop/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 33d1ede74de15c3458d6120082005cef2a8ca4ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54706 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 diff --git a/desktop/gradle/wrapper/gradle-wrapper.properties b/desktop/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9dc6ecadea7..00000000000 --- a/desktop/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Aug 16 20:34:11 CEST 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-bin.zip From d6178f6eea230b642330ed1e1648ac0e31b88b2e Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:44:04 +0100 Subject: [PATCH 04/38] Remove osdetector plugin from desktop build This is used only in common/build.gradle and is obsolete here. --- desktop/build.gradle | 5 ----- 1 file changed, 5 deletions(-) diff --git a/desktop/build.gradle b/desktop/build.gradle index 975635fd2c8..6cd7bc1643e 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -4,7 +4,6 @@ buildscript { } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' - classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' classpath files('gradle-witness.jar') } } @@ -13,13 +12,9 @@ apply plugin: 'java' apply plugin: 'application' apply plugin: 'maven' apply plugin: 'com.github.johnrengelman.shadow' -apply plugin: 'com.google.osdetector' apply plugin: 'witness' apply from: 'gradle-witness.gradle' -ext.platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os - - group = 'network.bisq' version = '0.8.0-SNAPSHOT' From 572155fa4a3cbcc445580255cc3d0bec6c00e3b1 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:46:24 +0100 Subject: [PATCH 05/38] Remove duplicate openjfx dependencies --- common/build.gradle | 4 ---- 1 file changed, 4 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 3fed0fb2c0e..bf8a4c97932 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -80,8 +80,4 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' testCompile 'junit:junit:4.12' - - compile "org.openjfx:javafx-base:11:$platform" - compile "org.openjfx:javafx-graphics:11:$platform" - compile "org.openjfx:javafx-controls:11:$platform" } From c25759042468574bd0a62e7eee9838161f319947 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 09:54:56 +0100 Subject: [PATCH 06/38] Upgrade to Gradle 4.10.2 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a95009c3b9e..e0b3fb8d70b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From cc5ed491bee55accdb18c6b6028f925f684b2fe8 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 10:16:59 +0100 Subject: [PATCH 07/38] Eliminate unnecessary dependency from assets->common --- assets/build.gradle | 6 +++++- assets/src/main/java/bisq/asset/PrintTool.java | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index 28f6fc9940c..63a3e51d7df 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -32,7 +32,11 @@ repositories { } dependencies { - compile project(':common') + compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { + exclude(module: 'protobuf-java') + } compile 'commons-codec:commons-codec:1.9' + compile 'org.apache.commons:commons-lang3:3.4' + compile 'org.bouncycastle:bcpg-jdk15on:1.56' testCompile 'junit:junit:4.12' } diff --git a/assets/src/main/java/bisq/asset/PrintTool.java b/assets/src/main/java/bisq/asset/PrintTool.java index 48cdb2b02b6..cc17d60660f 100644 --- a/assets/src/main/java/bisq/asset/PrintTool.java +++ b/assets/src/main/java/bisq/asset/PrintTool.java @@ -17,8 +17,6 @@ package bisq.asset; -import bisq.common.util.Tuple2; - import java.util.Comparator; public class PrintTool { @@ -31,14 +29,24 @@ public static void main(String[] args) { .sorted(Comparator.comparing(o -> o.getName().toLowerCase())) .filter(e -> !e.getTickerSymbol().equals("BSQ")) // BSQ is not out yet... .filter(e -> !e.getTickerSymbol().equals("BTC")) - .map(e -> new Tuple2(e.getName(), e.getTickerSymbol())) // We want to get rid of duplicated entries for regtest/testnet... + .map(e -> new Pair(e.getName(), e.getTickerSymbol())) // We want to get rid of duplicated entries for regtest/testnet... .distinct() .forEach(e -> sb.append("
  • “") - .append(e.second) + .append(e.right) .append("”, “") - .append(e.first) + .append(e.left) .append("”
  • ") .append("\n")); System.out.println(sb.toString()); } + + private static class Pair { + String left; + String right; + + Pair(String left, String right) { + this.left = left; + this.right = right; + } + } } From 394914ef8dde5e3ec7c01c5ffc18caa0b39edb3b Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:00:31 +0100 Subject: [PATCH 08/38] Use single quotes for Gradle strings --- relay/build.gradle | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/relay/build.gradle b/relay/build.gradle index b0cdca7a491..2f885ee0568 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -12,15 +12,15 @@ mainClassName = 'bisq.monitor.MonitorMain' repositories { jcenter() - maven { url "https://jitpack.io" } + maven { url 'https://jitpack.io' } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } dependencies { - compile project(":common") - compile("com.sparkjava:spark-core:2.5.2") - compile("com.turo:pushy:0.13.2") - compile("com.google.firebase:firebase-admin:6.2.0") + compile project(':common') + compile 'com.sparkjava:spark-core:2.5.2' + compile 'com.turo:pushy:0.13.2' + compile 'com.google.firebase:firebase-admin:6.2.0' compile 'commons-codec:commons-codec:1.9' compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' @@ -29,4 +29,3 @@ dependencies { build.dependsOn installDist installDist.destinationDir = file('build/app') distZip.enabled = false - From 3c1c402d40a4a8c3a155b58a0b2b0a40ed2e1e5c Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:19:06 +0100 Subject: [PATCH 09/38] Remove use of maven plugin It is no longer necessary to publish Maven metadata about common, core and other submodules as they are no longer managed as separate libraries in separate repositories. The only way these modules should be getting referenced is from within applications in this repository such as desktop, statsnode, etc. Essentially, we're no longer publishing our libraries for public consumption. --- assets/build.gradle | 4 ---- common/build.gradle | 4 ---- core/build.gradle | 4 ---- desktop/build.gradle | 2 -- monitor/build.gradle | 3 --- p2p/build.gradle | 4 ---- relay/build.gradle | 3 --- seednode/build.gradle | 2 -- statsnode/build.gradle | 3 --- 9 files changed, 29 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index 63a3e51d7df..2ca5f79e067 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -1,11 +1,7 @@ plugins { id 'java' - id 'maven' } -group 'network.bisq' -version '-SNAPSHOT' - sourceCompatibility = 1.10 tasks.withType(JavaCompile) { diff --git a/common/build.gradle b/common/build.gradle index bf8a4c97932..30ce795eca0 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -12,7 +12,6 @@ buildscript { plugins { id 'java' - id 'maven' id 'com.google.protobuf' version '0.8.5' } @@ -23,9 +22,6 @@ ext { platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os } -group = 'network.bisq' -version = '-SNAPSHOT' - sourceCompatibility = 1.10 tasks.withType(JavaCompile) { diff --git a/core/build.gradle b/core/build.gradle index 4033a706f84..0b7bfbd8141 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,11 +1,7 @@ plugins { id 'java' - id 'maven' } -group = 'network.bisq' -version = '-SNAPSHOT' - sourceCompatibility = 1.10 tasks.withType(JavaCompile) { diff --git a/desktop/build.gradle b/desktop/build.gradle index 6cd7bc1643e..3ae22dc5781 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -10,12 +10,10 @@ buildscript { apply plugin: 'java' apply plugin: 'application' -apply plugin: 'maven' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'witness' apply from: 'gradle-witness.gradle' -group = 'network.bisq' version = '0.8.0-SNAPSHOT' sourceCompatibility = 1.10 diff --git a/monitor/build.gradle b/monitor/build.gradle index a4ac1b14d24..1b36a666474 100644 --- a/monitor/build.gradle +++ b/monitor/build.gradle @@ -3,9 +3,6 @@ plugins { id 'application' } -group = 'network.bisq' -version = '0.8.0-SNAPSHOT' - sourceCompatibility = 1.10 mainClassName = 'bisq.monitor.MonitorMain' diff --git a/p2p/build.gradle b/p2p/build.gradle index b7dd2275c3b..d67fd2d3c30 100644 --- a/p2p/build.gradle +++ b/p2p/build.gradle @@ -1,11 +1,7 @@ plugins { id 'java' - id 'maven' } -group = 'network.bisq' -version = '-SNAPSHOT' - sourceCompatibility = 1.10 repositories { diff --git a/relay/build.gradle b/relay/build.gradle index 2f885ee0568..1792ebe9f4e 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -3,9 +3,6 @@ plugins { id 'application' } -group = 'network.bisq' -version = '0.8.0-SNAPSHOT' - sourceCompatibility = 1.10 mainClassName = 'bisq.monitor.MonitorMain' diff --git a/seednode/build.gradle b/seednode/build.gradle index e7e597687fe..cfbdf06e2b4 100644 --- a/seednode/build.gradle +++ b/seednode/build.gradle @@ -9,10 +9,8 @@ buildscript { apply plugin: 'java' apply plugin: 'application' -apply plugin: 'maven' apply plugin: 'com.github.johnrengelman.shadow' -group = 'network.bisq' version = '0.8.0-SNAPSHOT' sourceCompatibility = 1.10 diff --git a/statsnode/build.gradle b/statsnode/build.gradle index 7a3264f13f5..c04d8c8d240 100644 --- a/statsnode/build.gradle +++ b/statsnode/build.gradle @@ -3,9 +3,6 @@ plugins { id 'application' } -group = 'network.bisq' -version = '0.8.0-SNAPSHOT' - sourceCompatibility = 1.10 mainClassName = 'bisq.statistics.StatisticsMain' From 1a0b01770c24b45406ab3c6fde450ba9db802006 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:36:22 +0100 Subject: [PATCH 10/38] Remove use of lombok annotations in relay --- relay/build.gradle | 2 -- relay/src/main/java/bisq/relay/RelayService.java | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/relay/build.gradle b/relay/build.gradle index 1792ebe9f4e..b944156d26d 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -19,8 +19,6 @@ dependencies { compile 'com.turo:pushy:0.13.2' compile 'com.google.firebase:firebase-admin:6.2.0' compile 'commons-codec:commons-codec:1.9' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' } build.dependsOn installDist diff --git a/relay/src/main/java/bisq/relay/RelayService.java b/relay/src/main/java/bisq/relay/RelayService.java index 4bb7910e85c..50c2ee5437e 100644 --- a/relay/src/main/java/bisq/relay/RelayService.java +++ b/relay/src/main/java/bisq/relay/RelayService.java @@ -25,7 +25,9 @@ import java.util.Scanner; import java.util.concurrent.ExecutionException; -import lombok.extern.slf4j.Slf4j; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @@ -43,8 +45,8 @@ import com.turo.pushy.apns.util.SimpleApnsPushNotification; import com.turo.pushy.apns.util.concurrent.PushNotificationFuture; -@Slf4j class RelayService { + private static final Logger log = LoggerFactory.getLogger(RelayMain.class); private static final String ANDROID_DATABASE_URL = "https://bisqnotifications.firebaseio.com"; // Used in Bisq app to check for success state. We won't want a code dependency just for that string so we keep it // duplicated in core and here. Must not be changed. From b857e5d94aedeb3c4d0aa16e6c0454cc3d6ea832 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:37:14 +0100 Subject: [PATCH 11/38] Fix broken mainClassName in relay --- relay/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relay/build.gradle b/relay/build.gradle index b944156d26d..63fe769671a 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -5,7 +5,7 @@ plugins { sourceCompatibility = 1.10 -mainClassName = 'bisq.monitor.MonitorMain' +mainClassName = 'bisq.relay.RelayMain' repositories { jcenter() From f0b4496d13871d76d508db5c55bf214623b78e8e Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:38:29 +0100 Subject: [PATCH 12/38] Remove unnecessary JesusMcCloud repo from relay --- relay/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/relay/build.gradle b/relay/build.gradle index 63fe769671a..e21c567ed31 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -10,7 +10,6 @@ mainClassName = 'bisq.relay.RelayMain' repositories { jcenter() maven { url 'https://jitpack.io' } - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } dependencies { From 95c8b8ddfa570698d466a662e375ef3955a2e919 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 13:40:00 +0100 Subject: [PATCH 13/38] Pull up application and configuration of java plugin --- assets/build.gradle | 6 ------ build.gradle | 5 +++++ common/build.gradle | 3 --- core/build.gradle | 6 ------ desktop/build.gradle | 3 --- monitor/build.gradle | 3 --- p2p/build.gradle | 6 ------ pricenode/build.gradle | 4 ---- relay/build.gradle | 3 --- seednode/build.gradle | 5 ----- statsnode/build.gradle | 3 --- 11 files changed, 5 insertions(+), 42 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index 2ca5f79e067..b48a82ad830 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -1,9 +1,3 @@ -plugins { - id 'java' -} - -sourceCompatibility = 1.10 - tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } diff --git a/build.gradle b/build.gradle index caeb306050d..b03b793f072 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,8 @@ plugins { id 'java-base' } + +subprojects { + apply plugin: 'java' + sourceCompatibility = 1.10 +} diff --git a/common/build.gradle b/common/build.gradle index 30ce795eca0..b674e4049a6 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -11,7 +11,6 @@ buildscript { } plugins { - id 'java' id 'com.google.protobuf' version '0.8.5' } @@ -22,8 +21,6 @@ ext { platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os } -sourceCompatibility = 1.10 - tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } diff --git a/core/build.gradle b/core/build.gradle index 0b7bfbd8141..e880488f1f7 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,9 +1,3 @@ -plugins { - id 'java' -} - -sourceCompatibility = 1.10 - tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } diff --git a/desktop/build.gradle b/desktop/build.gradle index 3ae22dc5781..01a48f03b39 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -8,7 +8,6 @@ buildscript { } } -apply plugin: 'java' apply plugin: 'application' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'witness' @@ -16,8 +15,6 @@ apply from: 'gradle-witness.gradle' version = '0.8.0-SNAPSHOT' -sourceCompatibility = 1.10 - mainClassName = 'bisq.desktop.app.BisqAppMain' def jmockitVersion = '1.42' diff --git a/monitor/build.gradle b/monitor/build.gradle index 1b36a666474..ed938777562 100644 --- a/monitor/build.gradle +++ b/monitor/build.gradle @@ -1,10 +1,7 @@ plugins { - id 'java' id 'application' } -sourceCompatibility = 1.10 - mainClassName = 'bisq.monitor.MonitorMain' repositories { diff --git a/p2p/build.gradle b/p2p/build.gradle index d67fd2d3c30..c3763fd25fa 100644 --- a/p2p/build.gradle +++ b/p2p/build.gradle @@ -1,9 +1,3 @@ -plugins { - id 'java' -} - -sourceCompatibility = 1.10 - repositories { jcenter() maven { url 'https://jitpack.io' } diff --git a/pricenode/build.gradle b/pricenode/build.gradle index 4096ee60041..328998d35d0 100644 --- a/pricenode/build.gradle +++ b/pricenode/build.gradle @@ -1,11 +1,7 @@ plugins { - id "java" id "org.springframework.boot" version "1.5.10.RELEASE" } -sourceCompatibility = 1.10 -targetCompatibility = 1.10 - version = file("src/main/resources/version.txt").text jar.manifest.attributes( diff --git a/relay/build.gradle b/relay/build.gradle index e21c567ed31..ecb1ba85600 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -1,10 +1,7 @@ plugins { - id 'java' id 'application' } -sourceCompatibility = 1.10 - mainClassName = 'bisq.relay.RelayMain' repositories { diff --git a/seednode/build.gradle b/seednode/build.gradle index cfbdf06e2b4..3154749a4fb 100644 --- a/seednode/build.gradle +++ b/seednode/build.gradle @@ -7,14 +7,9 @@ buildscript { } } -apply plugin: 'java' apply plugin: 'application' apply plugin: 'com.github.johnrengelman.shadow' -version = '0.8.0-SNAPSHOT' - -sourceCompatibility = 1.10 - mainClassName = 'bisq.seednode.SeedNodeMain' sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files diff --git a/statsnode/build.gradle b/statsnode/build.gradle index c04d8c8d240..e02760adada 100644 --- a/statsnode/build.gradle +++ b/statsnode/build.gradle @@ -1,10 +1,7 @@ plugins { - id 'java' id 'application' } -sourceCompatibility = 1.10 - mainClassName = 'bisq.statistics.StatisticsMain' repositories { From 4e1fa914a22452fd5c73579dde9fa04eee07df2a Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 14:06:23 +0100 Subject: [PATCH 14/38] Pull up common repositories to root build.gradle --- assets/build.gradle | 5 ----- build.gradle | 5 +++++ common/build.gradle | 5 ----- core/build.gradle | 2 -- desktop/build.gradle | 3 --- monitor/build.gradle | 2 -- p2p/build.gradle | 2 -- pricenode/build.gradle | 2 -- relay/build.gradle | 5 ----- seednode/build.gradle | 2 -- statsnode/build.gradle | 2 -- 11 files changed, 5 insertions(+), 30 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index b48a82ad830..2cc08a6519a 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -16,11 +16,6 @@ artifacts { archives javadocJar } -repositories { - jcenter() - maven { url 'https://jitpack.io' } -} - dependencies { compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { exclude(module: 'protobuf-java') diff --git a/build.gradle b/build.gradle index b03b793f072..371b5553e23 100644 --- a/build.gradle +++ b/build.gradle @@ -5,4 +5,9 @@ plugins { subprojects { apply plugin: 'java' sourceCompatibility = 1.10 + + repositories { + jcenter() + maven { url 'https://jitpack.io' } + } } diff --git a/common/build.gradle b/common/build.gradle index b674e4049a6..4999fdd1580 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -25,11 +25,6 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -repositories { - jcenter() - maven { url 'https://jitpack.io' } -} - sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" protobuf { diff --git a/core/build.gradle b/core/build.gradle index e880488f1f7..29bee208e94 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -5,8 +5,6 @@ tasks.withType(JavaCompile) { def jmockitVersion = '1.42' repositories { - jcenter() - maven { url 'https://jitpack.io' } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } diff --git a/desktop/build.gradle b/desktop/build.gradle index 01a48f03b39..eea066ddd1a 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -31,10 +31,7 @@ tasks.withType(JavaCompile) { sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files repositories { - jcenter() - maven { url 'https://jitpack.io' } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } - maven { url 'https://dl.bintray.com/jerady/maven' } } dependencies { diff --git a/monitor/build.gradle b/monitor/build.gradle index ed938777562..122c6bf90ea 100644 --- a/monitor/build.gradle +++ b/monitor/build.gradle @@ -5,8 +5,6 @@ plugins { mainClassName = 'bisq.monitor.MonitorMain' repositories { - jcenter() - maven { url "https://jitpack.io" } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } diff --git a/p2p/build.gradle b/p2p/build.gradle index c3763fd25fa..efdac1bd73d 100644 --- a/p2p/build.gradle +++ b/p2p/build.gradle @@ -1,6 +1,4 @@ repositories { - jcenter() - maven { url 'https://jitpack.io' } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } diff --git a/pricenode/build.gradle b/pricenode/build.gradle index 328998d35d0..a3dc75984a7 100644 --- a/pricenode/build.gradle +++ b/pricenode/build.gradle @@ -11,8 +11,6 @@ jar.manifest.attributes( jar.archiveName "${rootProject.name}.jar" repositories { - jcenter() - maven { url "https://jitpack.io" } maven { url "https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/" } } diff --git a/relay/build.gradle b/relay/build.gradle index ecb1ba85600..2f879484efb 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -4,11 +4,6 @@ plugins { mainClassName = 'bisq.relay.RelayMain' -repositories { - jcenter() - maven { url 'https://jitpack.io' } -} - dependencies { compile project(':common') compile 'com.sparkjava:spark-core:2.5.2' diff --git a/seednode/build.gradle b/seednode/build.gradle index 3154749a4fb..41364f5e02c 100644 --- a/seednode/build.gradle +++ b/seednode/build.gradle @@ -15,8 +15,6 @@ mainClassName = 'bisq.seednode.SeedNodeMain' sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files repositories { - jcenter() - maven { url "https://jitpack.io" } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } diff --git a/statsnode/build.gradle b/statsnode/build.gradle index e02760adada..a39af93a0ca 100644 --- a/statsnode/build.gradle +++ b/statsnode/build.gradle @@ -5,8 +5,6 @@ plugins { mainClassName = 'bisq.statistics.StatisticsMain' repositories { - jcenter() - maven { url "https://jitpack.io" } maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } From f6a68f8aefed5d00c16eb743f2706d4ffeedc6c2 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 14:14:56 +0100 Subject: [PATCH 15/38] Pull up common JavaCompile config to root --- assets/build.gradle | 4 ---- build.gradle | 4 ++++ common/build.gradle | 4 ---- core/build.gradle | 4 ---- desktop/build.gradle | 4 ---- 5 files changed, 4 insertions(+), 16 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index 2cc08a6519a..4a05594f590 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -1,7 +1,3 @@ -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - javadoc { options.author = true options.addStringOption('Xdoclint:none', '-quiet') diff --git a/build.gradle b/build.gradle index 371b5553e23..c02ff4a71d5 100644 --- a/build.gradle +++ b/build.gradle @@ -10,4 +10,8 @@ subprojects { jcenter() maven { url 'https://jitpack.io' } } + + tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' + } } diff --git a/common/build.gradle b/common/build.gradle index 4999fdd1580..ff2aa756acc 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -21,10 +21,6 @@ ext { platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os } -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" protobuf { diff --git a/core/build.gradle b/core/build.gradle index 29bee208e94..a44ceb447d3 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,7 +1,3 @@ -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - def jmockitVersion = '1.42' repositories { diff --git a/desktop/build.gradle b/desktop/build.gradle index eea066ddd1a..d179de4fbd7 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -24,10 +24,6 @@ tasks.withType(AbstractArchiveTask) { reproducibleFileOrder = true } -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files repositories { From 1cdb39ab60d5b2b330abc746e3bb5bd92f32fde5 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 14:28:14 +0100 Subject: [PATCH 16/38] Pull up JesusMcCloud repo to root Not all subprojects need it, but most do. --- build.gradle | 1 + core/build.gradle | 4 ---- desktop/build.gradle | 4 ---- monitor/build.gradle | 4 ---- p2p/build.gradle | 4 ---- pricenode/build.gradle | 4 ---- seednode/build.gradle | 4 ---- statsnode/build.gradle | 4 ---- 8 files changed, 1 insertion(+), 28 deletions(-) diff --git a/build.gradle b/build.gradle index c02ff4a71d5..946f8b4d7de 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ subprojects { repositories { jcenter() maven { url 'https://jitpack.io' } + maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } tasks.withType(JavaCompile) { diff --git a/core/build.gradle b/core/build.gradle index a44ceb447d3..23d3bc9ac69 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,9 +1,5 @@ def jmockitVersion = '1.42' -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { compile project(':assets') compile project(':p2p') diff --git a/desktop/build.gradle b/desktop/build.gradle index d179de4fbd7..1884fa2fe52 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -26,10 +26,6 @@ tasks.withType(AbstractArchiveTask) { sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { // fixme(chirhonul): currently 'gradle install' using system gradle 4.9 fails with: // A POM cannot have multiple artifacts with the same type and classifier. Already have MavenArtifact bisq:zip:zip:null, trying to add MavenArtifact bisq:zip:zip:null. diff --git a/monitor/build.gradle b/monitor/build.gradle index 122c6bf90ea..4d0e9081224 100644 --- a/monitor/build.gradle +++ b/monitor/build.gradle @@ -4,10 +4,6 @@ plugins { mainClassName = 'bisq.monitor.MonitorMain' -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { compile project(':core') compile 'com.sparkjava:spark-core:2.5.2' diff --git a/p2p/build.gradle b/p2p/build.gradle index efdac1bd73d..e67ebc543d4 100644 --- a/p2p/build.gradle +++ b/p2p/build.gradle @@ -1,7 +1,3 @@ -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { compile project(':common') compile('com.github.JesusMcCloud.netlayer:tor.native:0.4.2') { diff --git a/pricenode/build.gradle b/pricenode/build.gradle index a3dc75984a7..32919f5a16b 100644 --- a/pricenode/build.gradle +++ b/pricenode/build.gradle @@ -10,10 +10,6 @@ jar.manifest.attributes( jar.archiveName "${rootProject.name}.jar" -repositories { - maven { url "https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/" } -} - dependencies { compile project(":core") compile project(":assets") diff --git a/seednode/build.gradle b/seednode/build.gradle index 41364f5e02c..7c2cace2fec 100644 --- a/seednode/build.gradle +++ b/seednode/build.gradle @@ -14,10 +14,6 @@ mainClassName = 'bisq.seednode.SeedNodeMain' sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { compile project(':core') runtime 'org.bouncycastle:bcprov-jdk15on:1.56' diff --git a/statsnode/build.gradle b/statsnode/build.gradle index a39af93a0ca..1f99b9401ca 100644 --- a/statsnode/build.gradle +++ b/statsnode/build.gradle @@ -4,10 +4,6 @@ plugins { mainClassName = 'bisq.statistics.StatisticsMain' -repositories { - maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } -} - dependencies { compile project(':core') compileOnly 'org.projectlombok:lombok:1.18.2' From bd1e7e273f27f47c9b03b6b70a6c20ff628946de Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:27:52 +0100 Subject: [PATCH 17/38] Pull up application plugin config to root --- build.gradle | 15 ++++++++++++++- desktop/build.gradle | 3 --- monitor/build.gradle | 8 -------- relay/build.gradle | 8 -------- seednode/build.gradle | 5 ----- statsnode/build.gradle | 8 -------- 6 files changed, 14 insertions(+), 33 deletions(-) diff --git a/build.gradle b/build.gradle index 946f8b4d7de..17ebd613be0 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-base' } -subprojects { +configure(subprojects) { apply plugin: 'java' sourceCompatibility = 1.10 @@ -16,3 +16,16 @@ subprojects { options.encoding = 'UTF-8' } } + +configure([project(':desktop'), + project(':monitor'), + project(':relay'), + project(':seednode'), + project(':statsnode')]) { + + apply plugin: 'application' + + build.dependsOn installDist + installDist.destinationDir = file('build/app') + distZip.enabled = false +} diff --git a/desktop/build.gradle b/desktop/build.gradle index 1884fa2fe52..30d67a1bfc8 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -8,7 +8,6 @@ buildscript { } } -apply plugin: 'application' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'witness' apply from: 'gradle-witness.gradle' @@ -62,5 +61,3 @@ test { def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath jvmArgs "-javaagent:$jmockit" } -build.dependsOn installDist -installDist.destinationDir = file('build/app') diff --git a/monitor/build.gradle b/monitor/build.gradle index 4d0e9081224..0a0a83f244a 100644 --- a/monitor/build.gradle +++ b/monitor/build.gradle @@ -1,7 +1,3 @@ -plugins { - id 'application' -} - mainClassName = 'bisq.monitor.MonitorMain' dependencies { @@ -11,7 +7,3 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' } - -build.dependsOn installDist -installDist.destinationDir = file('build/app') -distZip.enabled = false diff --git a/relay/build.gradle b/relay/build.gradle index 2f879484efb..74947464dd4 100644 --- a/relay/build.gradle +++ b/relay/build.gradle @@ -1,7 +1,3 @@ -plugins { - id 'application' -} - mainClassName = 'bisq.relay.RelayMain' dependencies { @@ -11,7 +7,3 @@ dependencies { compile 'com.google.firebase:firebase-admin:6.2.0' compile 'commons-codec:commons-codec:1.9' } - -build.dependsOn installDist -installDist.destinationDir = file('build/app') -distZip.enabled = false diff --git a/seednode/build.gradle b/seednode/build.gradle index 7c2cace2fec..fa92cd04603 100644 --- a/seednode/build.gradle +++ b/seednode/build.gradle @@ -7,7 +7,6 @@ buildscript { } } -apply plugin: 'application' apply plugin: 'com.github.johnrengelman.shadow' mainClassName = 'bisq.seednode.SeedNodeMain' @@ -20,7 +19,3 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' } - -build.dependsOn installDist -installDist.destinationDir = file('build/app') -distZip.enabled = false diff --git a/statsnode/build.gradle b/statsnode/build.gradle index 1f99b9401ca..eaee5955a33 100644 --- a/statsnode/build.gradle +++ b/statsnode/build.gradle @@ -1,7 +1,3 @@ -plugins { - id 'application' -} - mainClassName = 'bisq.statistics.StatisticsMain' dependencies { @@ -9,7 +5,3 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' } - -build.dependsOn installDist -installDist.destinationDir = file('build/app') -distZip.enabled = false From 83118b6640e6d936615f57ff101b32fe05dd47c9 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:28:43 +0100 Subject: [PATCH 18/38] Remove assets Javadoc jar Previously, when assets was managed as a separate library and repository, its Javadoc was published via Jitpack and linked to from the documentation at https://bisq.network. This is no longer the case, and therefore building the Javadoc jar is no longer necessary. --- assets/build.gradle | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/assets/build.gradle b/assets/build.gradle index 4a05594f590..1c263f5f405 100644 --- a/assets/build.gradle +++ b/assets/build.gradle @@ -1,17 +1,3 @@ -javadoc { - options.author = true - options.addStringOption('Xdoclint:none', '-quiet') -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -artifacts { - archives javadocJar -} - dependencies { compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { exclude(module: 'protobuf-java') From 51d9f00d44f59cdaaca17fec2169d350cc981269 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:35:07 +0100 Subject: [PATCH 19/38] Inline $jmockitVersion core/desktop build.gradle --- core/build.gradle | 4 +--- desktop/build.gradle | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/core/build.gradle b/core/build.gradle index 23d3bc9ac69..2b1b3172c98 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,5 +1,3 @@ -def jmockitVersion = '1.42' - dependencies { compile project(':assets') compile project(':p2p') @@ -29,7 +27,7 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile "org.jmockit:jmockit:$jmockitVersion" + testCompile 'org.jmockit:jmockit:1.42' testCompile 'junit:junit:4.12' testCompile('org.mockito:mockito-core:2.21.0') { exclude(module: 'objenesis') diff --git a/desktop/build.gradle b/desktop/build.gradle index 30d67a1bfc8..a4b4d4a593d 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -16,8 +16,6 @@ version = '0.8.0-SNAPSHOT' mainClassName = 'bisq.desktop.app.BisqAppMain' -def jmockitVersion = '1.42' - tasks.withType(AbstractArchiveTask) { preserveFileTimestamps = false reproducibleFileOrder = true @@ -43,7 +41,7 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile "org.jmockit:jmockit:$jmockitVersion" + testCompile 'org.jmockit:jmockit:1.42' testCompile('org.mockito:mockito-core:2.21.0') { exclude(module: 'objenesis') } From cdff12ad9fbb9a121bf8c313d7923b4c12829f4d Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:39:50 +0100 Subject: [PATCH 20/38] Fix incorrect name in pricenode jar and manifest --- pricenode/build.gradle | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pricenode/build.gradle b/pricenode/build.gradle index 32919f5a16b..0cbaca00a3e 100644 --- a/pricenode/build.gradle +++ b/pricenode/build.gradle @@ -5,11 +5,9 @@ plugins { version = file("src/main/resources/version.txt").text jar.manifest.attributes( - "Implementation-Title": rootProject.name, + "Implementation-Title": project.name, "Implementation-Version": version) -jar.archiveName "${rootProject.name}.jar" - dependencies { compile project(":core") compile project(":assets") From c8956567e439c9e9b5a21af3381ccbcb073d4ff3 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:44:10 +0100 Subject: [PATCH 21/38] Pull up remaining assets config to root --- assets/build.gradle | 9 --------- build.gradle | 13 ++++++++++++- 2 files changed, 12 insertions(+), 10 deletions(-) delete mode 100644 assets/build.gradle diff --git a/assets/build.gradle b/assets/build.gradle deleted file mode 100644 index 1c263f5f405..00000000000 --- a/assets/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -dependencies { - compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { - exclude(module: 'protobuf-java') - } - compile 'commons-codec:commons-codec:1.9' - compile 'org.apache.commons:commons-lang3:3.4' - compile 'org.bouncycastle:bcpg-jdk15on:1.56' - testCompile 'junit:junit:4.12' -} diff --git a/build.gradle b/build.gradle index 17ebd613be0..648c6f887b6 100644 --- a/build.gradle +++ b/build.gradle @@ -22,10 +22,21 @@ configure([project(':desktop'), project(':relay'), project(':seednode'), project(':statsnode')]) { - apply plugin: 'application' build.dependsOn installDist installDist.destinationDir = file('build/app') distZip.enabled = false } + +configure(project(':assets')) { + dependencies { + compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { + exclude(module: 'protobuf-java') + } + compile 'commons-codec:commons-codec:1.9' + compile 'org.apache.commons:commons-lang3:3.4' + compile 'org.bouncycastle:bcpg-jdk15on:1.56' + testCompile 'junit:junit:4.12' + } +} From d4edb81d8767ee1eb7a2867db01eeae77307b10b Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 16:55:33 +0100 Subject: [PATCH 22/38] Pull up remaining common config to root --- build.gradle | 69 +++++++++++++++++++++++++++++++++++++++++++-- common/build.gradle | 67 ------------------------------------------- 2 files changed, 67 insertions(+), 69 deletions(-) delete mode 100644 common/build.gradle diff --git a/build.gradle b/build.gradle index 648c6f887b6..e929c32fa82 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,15 @@ -plugins { - id 'java-base' +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5' + classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' + } +} + +configure(rootProject) { + apply plugin: 'java-base' } configure(subprojects) { @@ -40,3 +50,58 @@ configure(project(':assets')) { testCompile 'junit:junit:4.12' } } + +configure(project(':common')) { + apply plugin: 'com.google.protobuf' + apply plugin: 'com.google.osdetector' + + ext { + protobufVersion = '3.5.1' + platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os + } + + sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" + + protobuf { + protoc { + artifact = "com.google.protobuf:protoc:$protobufVersion" + } + } + + dependencies { + compile "org.openjfx:javafx-base:11:$platform" + compile "org.openjfx:javafx-graphics:11:$platform" + compile "org.openjfx:javafx-controls:11:$platform" + compile "org.openjfx:javafx-fxml:11:$platform" + compile "org.openjfx:javafx-swing:11:$platform" + + compile "com.google.protobuf:protobuf-java:$protobufVersion" + compile 'com.google.code.gson:gson:2.7' + compile('com.googlecode.json-simple:json-simple:1.1.1') { + exclude(module: 'junit') + } + compile 'org.springframework:spring-core:4.3.6.RELEASE' + compile 'org.slf4j:slf4j-api:1.7.22' + compile 'ch.qos.logback:logback-core:1.1.10' + compile 'ch.qos.logback:logback-classic:1.1.10' + compile 'com.google.code.findbugs:jsr305:3.0.1' + compile 'com.google.guava:guava:20.0' + compile('com.google.inject:guice:4.1.0') { + exclude(module: 'guava') + } + compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { + exclude(module: 'jsr305') + exclude(module: 'slf4j-api') + exclude(module: 'guava') + exclude(module: 'protobuf-java') + } + compile 'org.jetbrains:annotations:13.0' + runtime 'org.bouncycastle:bcprov-jdk15on:1.56' + compile 'org.bouncycastle:bcpg-jdk15on:1.56' + compile 'commons-io:commons-io:2.4' + compile 'org.apache.commons:commons-lang3:3.4' + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + testCompile 'junit:junit:4.12' + } +} diff --git a/common/build.gradle b/common/build.gradle deleted file mode 100644 index ff2aa756acc..00000000000 --- a/common/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -// Note, version 1.6.0 of osdetector-gradle-plugin cannot be applied with a plugins block -// So a buildscript block is used -// See https://github.com/google/osdetector-gradle-plugin/issues/15 -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' - } -} - -plugins { - id 'com.google.protobuf' version '0.8.5' -} - -apply plugin: 'com.google.osdetector' - -ext { - protobufVersion = '3.5.1' - platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os -} - -sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" - -protobuf { - protoc { - artifact = "com.google.protobuf:protoc:$protobufVersion" - } -} - -dependencies { - compile "org.openjfx:javafx-base:11:$platform" - compile "org.openjfx:javafx-graphics:11:$platform" - compile "org.openjfx:javafx-controls:11:$platform" - compile "org.openjfx:javafx-fxml:11:$platform" - compile "org.openjfx:javafx-swing:11:$platform" - - compile "com.google.protobuf:protobuf-java:$protobufVersion" - compile 'com.google.code.gson:gson:2.7' - compile('com.googlecode.json-simple:json-simple:1.1.1') { - exclude(module: 'junit') - } - compile 'org.springframework:spring-core:4.3.6.RELEASE' - compile 'org.slf4j:slf4j-api:1.7.22' - compile 'ch.qos.logback:logback-core:1.1.10' - compile 'ch.qos.logback:logback-classic:1.1.10' - compile 'com.google.code.findbugs:jsr305:3.0.1' - compile 'com.google.guava:guava:20.0' - compile('com.google.inject:guice:4.1.0') { - exclude(module: 'guava') - } - compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { - exclude(module: 'jsr305') - exclude(module: 'slf4j-api') - exclude(module: 'guava') - exclude(module: 'protobuf-java') - } - compile 'org.jetbrains:annotations:13.0' - runtime 'org.bouncycastle:bcprov-jdk15on:1.56' - compile 'org.bouncycastle:bcpg-jdk15on:1.56' - compile 'commons-io:commons-io:2.4' - compile 'org.apache.commons:commons-lang3:3.4' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile 'junit:junit:4.12' -} From 0f5e9b794c5ad2b0a7cec6eee2340b9a5caaa6b5 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:18:46 +0100 Subject: [PATCH 23/38] Pull up remaining core config to root --- build.gradle | 54 +++++++++++++++++++++++++++++++++++++++++++++++ core/build.gradle | 52 --------------------------------------------- 2 files changed, 54 insertions(+), 52 deletions(-) delete mode 100644 core/build.gradle diff --git a/build.gradle b/build.gradle index e929c32fa82..fcf189c4b6b 100644 --- a/build.gradle +++ b/build.gradle @@ -105,3 +105,57 @@ configure(project(':common')) { testCompile 'junit:junit:4.12' } } + +configure(project(':core')) { + dependencies { + compile project(':assets') + compile project(':p2p') + compile 'net.sf.jopt-simple:jopt-simple:5.0.3' + compile('network.bisq.btcd-cli4j:btcd-cli4j-core:3864e1c4') { + exclude(module: 'slf4j-api') + exclude(module: 'httpclient') + exclude(module: 'commons-lang3') + exclude(module: 'jackson-core') + exclude(module: 'jackson-annotations') + exclude(module: 'jackson-databind') + } + compile('network.bisq.btcd-cli4j:btcd-cli4j-daemon:3864e1c4') { + exclude(module: 'slf4j-api') + exclude(module: 'httpclient') + exclude(module: 'commons-lang3') + exclude(module: 'jackson-core') + exclude(module: 'jackson-annotations') + exclude(module: 'jackson-databind') + } + compile 'com.fasterxml.jackson.core:jackson-core:2.8.10' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.10' + compile('com.fasterxml.jackson.core:jackson-databind:2.8.10') { + exclude(module: 'jackson-annotations') + } + + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + + testCompile 'org.jmockit:jmockit:1.42' + testCompile 'junit:junit:4.12' + testCompile('org.mockito:mockito-core:2.21.0') { + exclude(module: 'objenesis') + } + testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' + testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' + + + testCompile 'org.springframework:spring-test:4.3.6.RELEASE' + testCompile 'com.natpryce:make-it-easy:4.0.1' + testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' + testCompileOnly 'org.projectlombok:lombok:1.18.2' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + } + + test { + systemProperty 'jdk.attach.allowAttachSelf', true + + def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath + jvmArgs "-javaagent:$jmockit" + } +} diff --git a/core/build.gradle b/core/build.gradle deleted file mode 100644 index 2b1b3172c98..00000000000 --- a/core/build.gradle +++ /dev/null @@ -1,52 +0,0 @@ -dependencies { - compile project(':assets') - compile project(':p2p') - compile 'net.sf.jopt-simple:jopt-simple:5.0.3' - compile('network.bisq.btcd-cli4j:btcd-cli4j-core:3864e1c4') { - exclude(module: 'slf4j-api') - exclude(module: 'httpclient') - exclude(module: 'commons-lang3') - exclude(module: 'jackson-core') - exclude(module: 'jackson-annotations') - exclude(module: 'jackson-databind') - } - compile('network.bisq.btcd-cli4j:btcd-cli4j-daemon:3864e1c4') { - exclude(module: 'slf4j-api') - exclude(module: 'httpclient') - exclude(module: 'commons-lang3') - exclude(module: 'jackson-core') - exclude(module: 'jackson-annotations') - exclude(module: 'jackson-databind') - } - compile 'com.fasterxml.jackson.core:jackson-core:2.8.10' - compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.10' - compile('com.fasterxml.jackson.core:jackson-databind:2.8.10') { - exclude(module: 'jackson-annotations') - } - - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - - testCompile 'org.jmockit:jmockit:1.42' - testCompile 'junit:junit:4.12' - testCompile('org.mockito:mockito-core:2.21.0') { - exclude(module: 'objenesis') - } - testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' - testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' - - - testCompile 'org.springframework:spring-test:4.3.6.RELEASE' - testCompile 'com.natpryce:make-it-easy:4.0.1' - testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' -} - -test { - systemProperty 'jdk.attach.allowAttachSelf', true - - def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath - jvmArgs "-javaagent:$jmockit" -} - From 3c54be2d4f45240d8db0165355096f8264634db6 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:37:32 +0100 Subject: [PATCH 24/38] Pull up remaining desktop config to root And also relocate gradle-witness jar and config (back) to root-level gradle/witness dir. --- build.gradle | 54 ++++++++++++++++ desktop/build.gradle | 61 ------------------ .../witness}/gradle-witness.gradle | 2 +- .../witness}/gradle-witness.jar | Bin 4 files changed, 55 insertions(+), 62 deletions(-) delete mode 100644 desktop/build.gradle rename {desktop => gradle/witness}/gradle-witness.gradle (99%) rename {desktop => gradle/witness}/gradle-witness.jar (100%) diff --git a/build.gradle b/build.gradle index fcf189c4b6b..b167e3afc7a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,8 @@ buildscript { dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5' classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' + classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' + classpath files('gradle/witness/gradle-witness.jar') } } @@ -159,3 +161,55 @@ configure(project(':core')) { jvmArgs "-javaagent:$jmockit" } } + +configure(project(':desktop')) { + apply plugin: 'com.github.johnrengelman.shadow' + apply plugin: 'witness' + apply from: '../gradle/witness/gradle-witness.gradle' + + version = '0.8.0-SNAPSHOT' + + mainClassName = 'bisq.desktop.app.BisqAppMain' + + tasks.withType(AbstractArchiveTask) { + preserveFileTimestamps = false + reproducibleFileOrder = true + } + + sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files + + dependencies { + compile project(':p2p') + compile project(':core') + compile project(':common') + compile 'org.controlsfx:controlsfx:8.0.6_20' + compile 'org.reactfx:reactfx:2.0-M3' + compile 'net.glxn:qrgen:1.3' + compile 'de.jensd:fontawesomefx:8.0.0' + compile 'de.jensd:fontawesomefx-commons:9.1.2' + compile 'de.jensd:fontawesomefx-materialdesignfont:2.0.26-9.1.2' + compile 'com.googlecode.jcsv:jcsv:1.4.0' + compile 'com.github.sarxos:webcam-capture:0.3.12' + + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + + testCompile 'org.jmockit:jmockit:1.42' + testCompile('org.mockito:mockito-core:2.21.0') { + exclude(module: 'objenesis') + } + testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' + testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' + testCompile 'org.springframework:spring-test:4.3.6.RELEASE' + testCompile 'com.natpryce:make-it-easy:4.0.1' + testCompileOnly 'org.projectlombok:lombok:1.18.2' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + } + + test { + systemProperty 'jdk.attach.allowAttachSelf', true + + def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath + jvmArgs "-javaagent:$jmockit" + } +} diff --git a/desktop/build.gradle b/desktop/build.gradle deleted file mode 100644 index a4b4d4a593d..00000000000 --- a/desktop/build.gradle +++ /dev/null @@ -1,61 +0,0 @@ -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' - classpath files('gradle-witness.jar') - } -} - -apply plugin: 'com.github.johnrengelman.shadow' -apply plugin: 'witness' -apply from: 'gradle-witness.gradle' - -version = '0.8.0-SNAPSHOT' - -mainClassName = 'bisq.desktop.app.BisqAppMain' - -tasks.withType(AbstractArchiveTask) { - preserveFileTimestamps = false - reproducibleFileOrder = true -} - -sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files - -dependencies { - // fixme(chirhonul): currently 'gradle install' using system gradle 4.9 fails with: - // A POM cannot have multiple artifacts with the same type and classifier. Already have MavenArtifact bisq:zip:zip:null, trying to add MavenArtifact bisq:zip:zip:null. - compile project(':p2p') - compile project(':core') - compile project(':common') - compile 'org.controlsfx:controlsfx:8.0.6_20' - compile 'org.reactfx:reactfx:2.0-M3' - compile 'net.glxn:qrgen:1.3' - compile 'de.jensd:fontawesomefx:8.0.0' - compile 'de.jensd:fontawesomefx-commons:9.1.2' - compile 'de.jensd:fontawesomefx-materialdesignfont:2.0.26-9.1.2' - compile 'com.googlecode.jcsv:jcsv:1.4.0' - compile 'com.github.sarxos:webcam-capture:0.3.12' - - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - - testCompile 'org.jmockit:jmockit:1.42' - testCompile('org.mockito:mockito-core:2.21.0') { - exclude(module: 'objenesis') - } - testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' - testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' - testCompile 'org.springframework:spring-test:4.3.6.RELEASE' - testCompile 'com.natpryce:make-it-easy:4.0.1' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' -} - -test { - systemProperty 'jdk.attach.allowAttachSelf', true - - def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath - jvmArgs "-javaagent:$jmockit" -} diff --git a/desktop/gradle-witness.gradle b/gradle/witness/gradle-witness.gradle similarity index 99% rename from desktop/gradle-witness.gradle rename to gradle/witness/gradle-witness.gradle index 0ff9b938f35..35725cd5582 100644 --- a/desktop/gradle-witness.gradle +++ b/gradle/witness/gradle-witness.gradle @@ -3,7 +3,7 @@ // 1. Remove the block entirely // 2. Replace the block with the following command: // -// ./gradlew -q calculateChecksums | grep -v network.bisq >> desktop/gradle-witness.gradle +// ./gradlew -q calculateChecksums | grep -v network.bisq >> gradle/witness/gradle-witness.gradle // // 3. Run `git diff` to verify that expected hashes have changed // 4. Commit the changes diff --git a/desktop/gradle-witness.jar b/gradle/witness/gradle-witness.jar similarity index 100% rename from desktop/gradle-witness.jar rename to gradle/witness/gradle-witness.jar From e97625cfc311cd5a679198b1b1d23d0b46a4f52d Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:41:37 +0100 Subject: [PATCH 25/38] Pull up remaining monitor config to root --- build.gradle | 12 ++++++++++++ monitor/build.gradle | 9 --------- 2 files changed, 12 insertions(+), 9 deletions(-) delete mode 100644 monitor/build.gradle diff --git a/build.gradle b/build.gradle index b167e3afc7a..9be8e3acc58 100644 --- a/build.gradle +++ b/build.gradle @@ -213,3 +213,15 @@ configure(project(':desktop')) { jvmArgs "-javaagent:$jmockit" } } + +configure(project(':monitor')) { + mainClassName = 'bisq.monitor.MonitorMain' + + dependencies { + compile project(':core') + compile 'com.sparkjava:spark-core:2.5.2' + compile 'net.gpedro.integrations.slack:slack-webhook:1.1.1' + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + } +} diff --git a/monitor/build.gradle b/monitor/build.gradle deleted file mode 100644 index 0a0a83f244a..00000000000 --- a/monitor/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -mainClassName = 'bisq.monitor.MonitorMain' - -dependencies { - compile project(':core') - compile 'com.sparkjava:spark-core:2.5.2' - compile 'net.gpedro.integrations.slack:slack-webhook:1.1.1' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' -} From 2f7c5f115080147db3bc013efd5e21f339ca13b8 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:46:03 +0100 Subject: [PATCH 26/38] Pull up remaining p2p config to root --- build.gradle | 20 ++++++++++++++++++++ p2p/build.gradle | 17 ----------------- 2 files changed, 20 insertions(+), 17 deletions(-) delete mode 100644 p2p/build.gradle diff --git a/build.gradle b/build.gradle index 9be8e3acc58..116f2566bca 100644 --- a/build.gradle +++ b/build.gradle @@ -108,6 +108,26 @@ configure(project(':common')) { } } +configure(project(':p2p')) { + dependencies { + compile project(':common') + compile('com.github.JesusMcCloud.netlayer:tor.native:0.4.2') { + exclude(module: 'slf4j-api') + } + compile('org.apache.httpcomponents:httpclient:4.5.3') { + exclude(module: 'commons-logging') + } + compile 'net.sf.jopt-simple:jopt-simple:5.0.3' + compile 'org.fxmisc.easybind:easybind:1.0.3' + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + testCompile 'junit:junit:4.12' + testCompile 'org.jmockit:jmockit:1.30' + testCompileOnly 'org.projectlombok:lombok:1.18.2' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + } +} + configure(project(':core')) { dependencies { compile project(':assets') diff --git a/p2p/build.gradle b/p2p/build.gradle deleted file mode 100644 index e67ebc543d4..00000000000 --- a/p2p/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -dependencies { - compile project(':common') - compile('com.github.JesusMcCloud.netlayer:tor.native:0.4.2') { - exclude(module: 'slf4j-api') - } - compile('org.apache.httpcomponents:httpclient:4.5.3') { - exclude(module: 'commons-logging') - } - compile 'net.sf.jopt-simple:jopt-simple:5.0.3' - compile 'org.fxmisc.easybind:easybind:1.0.3' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile 'junit:junit:4.12' - testCompile 'org.jmockit:jmockit:1.30' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' -} From 15b81df32f19ce40307ae31caa997d31dffff814 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:57:00 +0100 Subject: [PATCH 27/38] Pull up remaining pricenode config to root --- build.gradle | 25 +++++++++++++++++++++++++ pricenode/build.gradle | 23 ----------------------- 2 files changed, 25 insertions(+), 23 deletions(-) delete mode 100644 pricenode/build.gradle diff --git a/build.gradle b/build.gradle index 116f2566bca..08ba726e067 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0' classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' classpath files('gradle/witness/gradle-witness.jar') + classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.10.RELEASE' } } @@ -245,3 +246,27 @@ configure(project(':monitor')) { annotationProcessor 'org.projectlombok:lombok:1.18.2' } } + +configure(project(':pricenode')) { + apply plugin: "org.springframework.boot" + + version = file("src/main/resources/version.txt").text + + jar.manifest.attributes( + "Implementation-Title": project.name, + "Implementation-Version": version) + + dependencies { + compile project(":core") + compile project(":assets") + compile("org.knowm.xchange:xchange-bitcoinaverage:4.3.3") + compile("org.knowm.xchange:xchange-coinmarketcap:4.3.3") + compile("org.knowm.xchange:xchange-poloniex:4.3.3") + compile("org.springframework.boot:spring-boot-starter-web:1.5.10.RELEASE") + compile("org.springframework.boot:spring-boot-starter-actuator") + } + + task stage { + dependsOn assemble + } +} diff --git a/pricenode/build.gradle b/pricenode/build.gradle deleted file mode 100644 index 0cbaca00a3e..00000000000 --- a/pricenode/build.gradle +++ /dev/null @@ -1,23 +0,0 @@ -plugins { - id "org.springframework.boot" version "1.5.10.RELEASE" -} - -version = file("src/main/resources/version.txt").text - -jar.manifest.attributes( - "Implementation-Title": project.name, - "Implementation-Version": version) - -dependencies { - compile project(":core") - compile project(":assets") - compile("org.knowm.xchange:xchange-bitcoinaverage:4.3.3") - compile("org.knowm.xchange:xchange-coinmarketcap:4.3.3") - compile("org.knowm.xchange:xchange-poloniex:4.3.3") - compile("org.springframework.boot:spring-boot-starter-web:1.5.10.RELEASE") - compile("org.springframework.boot:spring-boot-starter-actuator") -} - -task stage { - dependsOn assemble -} From 9c82b3076a23a65dfeb801eea958965c2acf47fc Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 17:58:37 +0100 Subject: [PATCH 28/38] Pull up remaining relay config to root --- build.gradle | 12 ++++++++++++ relay/build.gradle | 9 --------- 2 files changed, 12 insertions(+), 9 deletions(-) delete mode 100644 relay/build.gradle diff --git a/build.gradle b/build.gradle index 08ba726e067..f669e02ad7c 100644 --- a/build.gradle +++ b/build.gradle @@ -270,3 +270,15 @@ configure(project(':pricenode')) { dependsOn assemble } } + +configure(project(':relay')) { + mainClassName = 'bisq.relay.RelayMain' + + dependencies { + compile project(':common') + compile 'com.sparkjava:spark-core:2.5.2' + compile 'com.turo:pushy:0.13.2' + compile 'com.google.firebase:firebase-admin:6.2.0' + compile 'commons-codec:commons-codec:1.9' + } +} diff --git a/relay/build.gradle b/relay/build.gradle deleted file mode 100644 index 74947464dd4..00000000000 --- a/relay/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -mainClassName = 'bisq.relay.RelayMain' - -dependencies { - compile project(':common') - compile 'com.sparkjava:spark-core:2.5.2' - compile 'com.turo:pushy:0.13.2' - compile 'com.google.firebase:firebase-admin:6.2.0' - compile 'commons-codec:commons-codec:1.9' -} From b0886dd02d8427d909071796b193526536d2c849 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 18:00:10 +0100 Subject: [PATCH 29/38] Pull up remaining seednode config to root --- build.gradle | 15 +++++++++++++++ seednode/build.gradle | 21 --------------------- 2 files changed, 15 insertions(+), 21 deletions(-) delete mode 100644 seednode/build.gradle diff --git a/build.gradle b/build.gradle index f669e02ad7c..b071c35ef8e 100644 --- a/build.gradle +++ b/build.gradle @@ -282,3 +282,18 @@ configure(project(':relay')) { compile 'commons-codec:commons-codec:1.9' } } + +configure(project(':seednode')) { + apply plugin: 'com.github.johnrengelman.shadow' + + mainClassName = 'bisq.seednode.SeedNodeMain' + + sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files + + dependencies { + compile project(':core') + runtime 'org.bouncycastle:bcprov-jdk15on:1.56' + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + } +} diff --git a/seednode/build.gradle b/seednode/build.gradle deleted file mode 100644 index fa92cd04603..00000000000 --- a/seednode/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' - } -} - -apply plugin: 'com.github.johnrengelman.shadow' - -mainClassName = 'bisq.seednode.SeedNodeMain' - -sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files - -dependencies { - compile project(':core') - runtime 'org.bouncycastle:bcprov-jdk15on:1.56' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' -} From 3cd467cc9fa92d43adbdb687e6bad40d1edc1eae Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 18:00:56 +0100 Subject: [PATCH 30/38] Pull up remaining statsnode config to root --- build.gradle | 10 ++++++++++ statsnode/build.gradle | 7 ------- 2 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 statsnode/build.gradle diff --git a/build.gradle b/build.gradle index b071c35ef8e..693f3c01774 100644 --- a/build.gradle +++ b/build.gradle @@ -297,3 +297,13 @@ configure(project(':seednode')) { annotationProcessor 'org.projectlombok:lombok:1.18.2' } } + +configure(project(':statsnode')) { + mainClassName = 'bisq.statistics.StatisticsMain' + + dependencies { + compile project(':core') + compileOnly 'org.projectlombok:lombok:1.18.2' + annotationProcessor 'org.projectlombok:lombok:1.18.2' + } +} diff --git a/statsnode/build.gradle b/statsnode/build.gradle deleted file mode 100644 index eaee5955a33..00000000000 --- a/statsnode/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -mainClassName = 'bisq.statistics.StatisticsMain' - -dependencies { - compile project(':core') - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' -} From cb4f6edd9a52fcace6228f4084dc08481f530eac Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 18:16:07 +0100 Subject: [PATCH 31/38] Minimize common subproject javafx dependencies --- build.gradle | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 693f3c01774..56b3696b938 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,12 @@ configure(rootProject) { configure(subprojects) { apply plugin: 'java' + apply plugin: 'com.google.osdetector' + sourceCompatibility = 1.10 + ext { + os = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os + } repositories { jcenter() @@ -56,11 +61,9 @@ configure(project(':assets')) { configure(project(':common')) { apply plugin: 'com.google.protobuf' - apply plugin: 'com.google.osdetector' ext { protobufVersion = '3.5.1' - platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os } sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" @@ -72,12 +75,8 @@ configure(project(':common')) { } dependencies { - compile "org.openjfx:javafx-base:11:$platform" - compile "org.openjfx:javafx-graphics:11:$platform" - compile "org.openjfx:javafx-controls:11:$platform" - compile "org.openjfx:javafx-fxml:11:$platform" - compile "org.openjfx:javafx-swing:11:$platform" - + compile "org.openjfx:javafx-base:11:$os" + compile "org.openjfx:javafx-graphics:11:$os" compile "com.google.protobuf:protobuf-java:$protobufVersion" compile 'com.google.code.gson:gson:2.7' compile('com.googlecode.json-simple:json-simple:1.1.1') { @@ -211,6 +210,9 @@ configure(project(':desktop')) { compile 'de.jensd:fontawesomefx-materialdesignfont:2.0.26-9.1.2' compile 'com.googlecode.jcsv:jcsv:1.4.0' compile 'com.github.sarxos:webcam-capture:0.3.12' + compile "org.openjfx:javafx-controls:11:$os" + compile "org.openjfx:javafx-fxml:11:$os" + compile "org.openjfx:javafx-swing:11:$os" compileOnly 'org.projectlombok:lombok:1.18.2' annotationProcessor 'org.projectlombok:lombok:1.18.2' From 5cdacbe33681952fbc9779adcf44108710f60b6e Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 18:41:56 +0100 Subject: [PATCH 32/38] Extract variables for duplicate dependency versions --- build.gradle | 124 ++++++++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 57 deletions(-) diff --git a/build.gradle b/build.gradle index 56b3696b938..912cac9ea9c 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,23 @@ configure(subprojects) { apply plugin: 'com.google.osdetector' sourceCompatibility = 1.10 + ext { + bcVersion = '1.56' + codecVersion = '1.9' + easyVersion = '4.0.1' + jmockitVersion = '1.42' + joptVersion = '5.0.3' + junitVersion = '4.12' + langVersion = '3.4' + libdohjVersion = 'd4ace7bc' + lombokVersion = '1.18.2' + mockitoVersion = '2.21.0' + powermockVersion = '2.0.0-beta.5' + protobufVersion = '3.5.1' + sparkVersion = '2.5.2' + springVersion = '4.3.6.RELEASE' + os = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os } @@ -30,6 +46,10 @@ configure(subprojects) { maven { url 'https://raw.githubusercontent.com/JesusMcCloud/tor-binary/master/release/' } } + dependencies { + testCompile 'junit:junit:4.12' + } + tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } @@ -49,23 +69,18 @@ configure([project(':desktop'), configure(project(':assets')) { dependencies { - compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { + compile("network.bisq.libdohj:libdohj-core:$libdohjVersion") { exclude(module: 'protobuf-java') } - compile 'commons-codec:commons-codec:1.9' - compile 'org.apache.commons:commons-lang3:3.4' - compile 'org.bouncycastle:bcpg-jdk15on:1.56' - testCompile 'junit:junit:4.12' + compile "commons-codec:commons-codec:$codecVersion" + compile "org.apache.commons:commons-lang3:$langVersion" + compile "org.bouncycastle:bcpg-jdk15on:$bcVersion" } } configure(project(':common')) { apply plugin: 'com.google.protobuf' - ext { - protobufVersion = '3.5.1' - } - sourceSets.main.java.srcDir "$buildDir/generated/source/proto/main/java" protobuf { @@ -91,20 +106,19 @@ configure(project(':common')) { compile('com.google.inject:guice:4.1.0') { exclude(module: 'guava') } - compile('network.bisq.libdohj:libdohj-core:d4ace7bc') { + compile("network.bisq.libdohj:libdohj-core:$libdohjVersion") { exclude(module: 'jsr305') exclude(module: 'slf4j-api') exclude(module: 'guava') exclude(module: 'protobuf-java') } compile 'org.jetbrains:annotations:13.0' - runtime 'org.bouncycastle:bcprov-jdk15on:1.56' - compile 'org.bouncycastle:bcpg-jdk15on:1.56' + runtime "org.bouncycastle:bcprov-jdk15on:$bcVersion" + compile "org.bouncycastle:bcpg-jdk15on:$bcVersion" compile 'commons-io:commons-io:2.4' - compile 'org.apache.commons:commons-lang3:3.4' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile 'junit:junit:4.12' + compile "org.apache.commons:commons-lang3:$langVersion" + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" } } @@ -117,14 +131,13 @@ configure(project(':p2p')) { compile('org.apache.httpcomponents:httpclient:4.5.3') { exclude(module: 'commons-logging') } - compile 'net.sf.jopt-simple:jopt-simple:5.0.3' + compile "net.sf.jopt-simple:jopt-simple:$joptVersion" compile 'org.fxmisc.easybind:easybind:1.0.3' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' - testCompile 'junit:junit:4.12' - testCompile 'org.jmockit:jmockit:1.30' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" + testCompile 'org.jmockit:jmockit:1.30' // must not use current $jmockitVersion + testCompileOnly "org.projectlombok:lombok:$lombokVersion" + testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" } } @@ -132,7 +145,7 @@ configure(project(':core')) { dependencies { compile project(':assets') compile project(':p2p') - compile 'net.sf.jopt-simple:jopt-simple:5.0.3' + compile "net.sf.jopt-simple:jopt-simple:$joptVersion" compile('network.bisq.btcd-cli4j:btcd-cli4j-core:3864e1c4') { exclude(module: 'slf4j-api') exclude(module: 'httpclient') @@ -155,23 +168,20 @@ configure(project(':core')) { exclude(module: 'jackson-annotations') } - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" - testCompile 'org.jmockit:jmockit:1.42' - testCompile 'junit:junit:4.12' - testCompile('org.mockito:mockito-core:2.21.0') { + testCompile "org.jmockit:jmockit:$jmockitVersion" + testCompile("org.mockito:mockito-core:$mockitoVersion") { exclude(module: 'objenesis') } - testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' - testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' - - - testCompile 'org.springframework:spring-test:4.3.6.RELEASE' - testCompile 'com.natpryce:make-it-easy:4.0.1' + testCompile "org.powermock:powermock-module-junit4:$powermockVersion" + testCompile "org.powermock:powermock-api-mockito2:$powermockVersion" + testCompile "org.springframework:spring-test:$springVersion" + testCompile "com.natpryce:make-it-easy:$easyVersion" testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + testCompileOnly "org.projectlombok:lombok:$lombokVersion" + testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" } test { @@ -214,19 +224,19 @@ configure(project(':desktop')) { compile "org.openjfx:javafx-fxml:11:$os" compile "org.openjfx:javafx-swing:11:$os" - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" - testCompile 'org.jmockit:jmockit:1.42' - testCompile('org.mockito:mockito-core:2.21.0') { + testCompile "org.jmockit:jmockit:$jmockitVersion" + testCompile("org.mockito:mockito-core:$mockitoVersion") { exclude(module: 'objenesis') } - testCompile 'org.powermock:powermock-module-junit4:2.0.0-beta.5' - testCompile 'org.powermock:powermock-api-mockito2:2.0.0-beta.5' - testCompile 'org.springframework:spring-test:4.3.6.RELEASE' - testCompile 'com.natpryce:make-it-easy:4.0.1' - testCompileOnly 'org.projectlombok:lombok:1.18.2' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.2' + testCompile "org.powermock:powermock-module-junit4:$powermockVersion" + testCompile "org.powermock:powermock-api-mockito2:$powermockVersion" + testCompile "org.springframework:spring-test:$springVersion" + testCompile "com.natpryce:make-it-easy:$easyVersion" + testCompileOnly "org.projectlombok:lombok:$lombokVersion" + testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" } test { @@ -242,10 +252,10 @@ configure(project(':monitor')) { dependencies { compile project(':core') - compile 'com.sparkjava:spark-core:2.5.2' + compile "com.sparkjava:spark-core:$sparkVersion" compile 'net.gpedro.integrations.slack:slack-webhook:1.1.1' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" } } @@ -278,10 +288,10 @@ configure(project(':relay')) { dependencies { compile project(':common') - compile 'com.sparkjava:spark-core:2.5.2' + compile "com.sparkjava:spark-core:$sparkVersion" compile 'com.turo:pushy:0.13.2' compile 'com.google.firebase:firebase-admin:6.2.0' - compile 'commons-codec:commons-codec:1.9' + compile "commons-codec:commons-codec:$codecVersion" } } @@ -294,9 +304,9 @@ configure(project(':seednode')) { dependencies { compile project(':core') - runtime 'org.bouncycastle:bcprov-jdk15on:1.56' - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' + runtime "org.bouncycastle:bcprov-jdk15on:$bcVersion" + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" } } @@ -305,7 +315,7 @@ configure(project(':statsnode')) { dependencies { compile project(':core') - compileOnly 'org.projectlombok:lombok:1.18.2' - annotationProcessor 'org.projectlombok:lombok:1.18.2' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" } } From 22b92f7057f23226ff454ea859e7f910e6894fa0 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 18:43:20 +0100 Subject: [PATCH 33/38] Use two blank lines between configure blocks To increase readability --- build.gradle | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/build.gradle b/build.gradle index 912cac9ea9c..7bf3ef19e22 100644 --- a/build.gradle +++ b/build.gradle @@ -11,10 +11,12 @@ buildscript { } } + configure(rootProject) { apply plugin: 'java-base' } + configure(subprojects) { apply plugin: 'java' apply plugin: 'com.google.osdetector' @@ -55,6 +57,7 @@ configure(subprojects) { } } + configure([project(':desktop'), project(':monitor'), project(':relay'), @@ -67,6 +70,7 @@ configure([project(':desktop'), distZip.enabled = false } + configure(project(':assets')) { dependencies { compile("network.bisq.libdohj:libdohj-core:$libdohjVersion") { @@ -78,6 +82,7 @@ configure(project(':assets')) { } } + configure(project(':common')) { apply plugin: 'com.google.protobuf' @@ -122,6 +127,7 @@ configure(project(':common')) { } } + configure(project(':p2p')) { dependencies { compile project(':common') @@ -141,6 +147,7 @@ configure(project(':p2p')) { } } + configure(project(':core')) { dependencies { compile project(':assets') @@ -192,6 +199,7 @@ configure(project(':core')) { } } + configure(project(':desktop')) { apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'witness' @@ -247,6 +255,7 @@ configure(project(':desktop')) { } } + configure(project(':monitor')) { mainClassName = 'bisq.monitor.MonitorMain' @@ -259,6 +268,7 @@ configure(project(':monitor')) { } } + configure(project(':pricenode')) { apply plugin: "org.springframework.boot" @@ -283,6 +293,7 @@ configure(project(':pricenode')) { } } + configure(project(':relay')) { mainClassName = 'bisq.relay.RelayMain' @@ -295,6 +306,7 @@ configure(project(':relay')) { } } + configure(project(':seednode')) { apply plugin: 'com.github.johnrengelman.shadow' @@ -310,6 +322,7 @@ configure(project(':seednode')) { } } + configure(project(':statsnode')) { mainClassName = 'bisq.statistics.StatisticsMain' From adb3e9e3c692df74c7d84653f2654911eb02d257 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 19:00:04 +0100 Subject: [PATCH 34/38] Remove unnecessary :desktop:test javaagent config --- build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7bf3ef19e22..d5faee13fbc 100644 --- a/build.gradle +++ b/build.gradle @@ -246,13 +246,6 @@ configure(project(':desktop')) { testCompileOnly "org.projectlombok:lombok:$lombokVersion" testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" } - - test { - systemProperty 'jdk.attach.allowAttachSelf', true - - def jmockit = configurations.testCompile.files.find { it.name.contains("jmockit") }.absolutePath - jvmArgs "-javaagent:$jmockit" - } } From 743a7692b7c8859c1f107a7bc90e4faabefce497 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 19:00:44 +0100 Subject: [PATCH 35/38] Remove unnecessary seednode resources config This looks to have been a copy and paste error when originally setting up the seednode build. --- build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index d5faee13fbc..5d7c2b6ffab 100644 --- a/build.gradle +++ b/build.gradle @@ -305,8 +305,6 @@ configure(project(':seednode')) { mainClassName = 'bisq.seednode.SeedNodeMain' - sourceSets.main.resources.srcDirs += ['src/main/java'] // to copy fxml and css files - dependencies { compile project(':core') runtime "org.bouncycastle:bcprov-jdk15on:$bcVersion" From 3913988f665bca8f1bbdd86ff1ac32be57d21886 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 4 Nov 2018 19:01:55 +0100 Subject: [PATCH 36/38] Remove unnecessary application of 'java-base' plugin This was needed at the root level for a while when first porting the build back to the monorepo, but is no longer necessary now. --- build.gradle | 5 ----- 1 file changed, 5 deletions(-) diff --git a/build.gradle b/build.gradle index 5d7c2b6ffab..08ead9fa2dc 100644 --- a/build.gradle +++ b/build.gradle @@ -12,11 +12,6 @@ buildscript { } -configure(rootProject) { - apply plugin: 'java-base' -} - - configure(subprojects) { apply plugin: 'java' apply plugin: 'com.google.osdetector' From f8ec6beedfccf62b31f5fe673634714ae0991608 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Mon, 5 Nov 2018 11:02:16 +0100 Subject: [PATCH 37/38] Remove unused $junitVersion Per review comments at https://github.com/bisq-network/bisq/pull/1862#discussion_r230646331. --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 08ead9fa2dc..976b096ecd9 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,6 @@ configure(subprojects) { easyVersion = '4.0.1' jmockitVersion = '1.42' joptVersion = '5.0.3' - junitVersion = '4.12' langVersion = '3.4' libdohjVersion = 'd4ace7bc' lombokVersion = '1.18.2' From 978fd2d4ab7bbec2453ac5506f78be51b9d2e6df Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Mon, 5 Nov 2018 11:07:43 +0100 Subject: [PATCH 38/38] Use $springVersion variable consistently Per review feedback at https://github.com/bisq-network/bisq/pull/1862#discussion_r230651226. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 976b096ecd9..4c58f7fcfec 100644 --- a/build.gradle +++ b/build.gradle @@ -96,7 +96,7 @@ configure(project(':common')) { compile('com.googlecode.json-simple:json-simple:1.1.1') { exclude(module: 'junit') } - compile 'org.springframework:spring-core:4.3.6.RELEASE' + compile "org.springframework:spring-core:$springVersion" compile 'org.slf4j:slf4j-api:1.7.22' compile 'ch.qos.logback:logback-core:1.1.10' compile 'ch.qos.logback:logback-classic:1.1.10'